根据文档,该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;
}
有人知道这个框架设计决定背后的原因吗?
框架中是否有任何内置的舍入算法算法?还是一些不受管理的Windows API?
对于初学者而言,可能只写decimal.Round(2.5m, 0)
期望值3而得到2却可能会产生误导。