根据文档,该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的初学者来说,这可能会产生误导。