构建高质量的C#代码
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

代码 2-11:Round()方法获取指定小数位(<RoundDemo>\Program.cs)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace RoundDemo
{
    class Program
    {
        static void Main(string[] args)
        {
        //double数据保留指定位数
        Console.WriteLine(Math.Round(1.214, 2));
        Console.WriteLine(Math.Round(1.216, 2));
        Console.WriteLine(Math.Round(1.215, 2));
        Console.WriteLine(Math.Round(1.225, 2));
        Console.WriteLine(Math.Round(1.2225, 3));
    }
}
}

图2-6为本代码的运行结果。

图2-6

在Round()方法中,采用的是银行家舍入法。它的基本原则是:转换后的数据将是最接近原值的数据。例如,为4时,就舍去它;为6时,就向前进位;如果为5,则一般会转换最接近的偶数。但这也和计算机内部计算的精度有关,在代码2-11的后三个输出中,我们就会发现这一情况。

Round()方法的一般调用格式为:

Round(exp1, exp2);

其中,exp1为要转换的源数据,可以是double或decimal类型数据;exp2为保留的小数位数。如果exp1为double类型,则exp2值的范围为0~15;如果exp1为decimal类型,则exp2的取值范围为0~28。

使用Round()方法保留小数位时,建议留有余地,比如在运算中需要2 位小数的精度,那么,我们在计算过程中就保留3位或更多的小数位,最后的结果再转换为2位小数,这样结果可能更接近于我们所需要的数值。关于Round()方法完整的说明请参考MSDN Library。

3. 如果你需要速度

如果查阅MSDN Library,你会发现,在Math类中的方法大量地使用了double和decimal数据类型。在前面我们曾经说过,在计算机中,理论上讲,整数的运算速度是最快的。现在,我们考虑一个问题,如果我们只需要进行整数的幂运算,比如求一个整数的平方,使用double数据类型会不会减慢其运算速度呢?类似的,在只需要整数运算的情况下呢?

一切用实践来证明,代码2-12中,我们将创建一个用于整数幂运算的Power()方法,然后,我们分别使用Math.Pow()方法和Power()方法进行一千万次(这是因为现在计算机的速度实在太快了)的求平方运算,看一看谁的时间更短。