日期:2014-05-17  浏览次数:20793 次

Math.Round的疑惑
 Math.Round(new decimal(34.965), 2);输出:34.96
 Math.Round(34.965, 2);输出:34.97

为什么输出结果不一样!

------解决方案--------------------
这个跟double.Round的具体实现有关。

Math.Round(34.965, 2)在内部计算的时候,先乘与100,然后再四舍五入。
但是由于浮点误差,34.965 * 100 得到的是3496.5000000000005。略大于0.5,于是向上取整。

而decimal是用整数来表现的。比如34965,3(其中3表示几个小数)可以用来表示34.965。
这种情况,就没有必要再乘100了,直接调整小数位然后取整,结果就是.Net默认的向偶数取整。