上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()方法进行一千万次(这是因为现在计算机的速度实在太快了)的求平方运算,看一看谁的时间更短。