为什么.NET使用银行家的四舍五入作为缺省值?根据文档,decimal.Round方法使用的是一种不为大多数应用程序所普遍的四舍五入的算法。因此,我总是编写一个自定义函数来执行更自然的加法算法:public static decimal RoundHalfUp(this decimal d, int decimals){
if (decimals < 0)
{
throw new ArgumentException("The decimals must be non-negative",
"decimals");
}
decimal multiplier = (decimal)Math.Pow(10, decimals);
decimal number = d * multiplier;
if (decimal.Truncate(number) < number)
{
number += 0.5m;
}
return decimal.Round(number) / multiplier;}有人知道这个框架设计决策背后的原因吗?在框架中是否有任何将整半算法内建的实现?或者是一些非托管的WindowsAPI?对于那些只会写东西的初学者来说,这可能是误导性的。decimal.Round(2.5m, 0)预期结果是3,但却得到2。
3 回答
扬帆大鱼
TA贡献1799条经验 获得超9个赞
MMMHUHU
TA贡献1834条经验 获得超8个赞
Math.Round
MidpointRounding
:
当一个数字介于另外两个数之间时,它被四舍五入到最近的偶数。 AwayFromZero-当一个数字介于另外两个数之间时,它被四舍五入到远离零的最近数。
- 3 回答
- 0 关注
- 342 浏览
添加回答
举报
0/150
提交
取消