用多少位数来计算数学.圆形答案

本文关键字:答案 多少 计算 | 更新日期: 2023-09-27 17:57:33

使用数学时。进行"四舍五入"时,是否考虑所有小数点,或者只考虑我们要四舍五进到的小数点右侧的数字?

示例;

decimal myNumber1 = 0.2651m;
decimal myNumber2 = 0.2650m;
Math.Round(myNumber1, 2) gives 0.27
Math.Round(myNumber2, 2) gives 0.26

我希望两者都是0.26,因为四舍五入不考虑小数点后第4位。

用多少位数来计算数学.圆形答案

四舍五入时不考虑小数点后第4位

这不是真的。

根据MSDN的说法,Math.Round(decimal)使用了MidpointRounding.ToEven的舍入类型。

中点舍入指定当要舍入的值正好位于两个可能的舍入值之间的一半时的舍入行为。

例如,

  • 0.2649将始终四舍五入到0.26
  • 0.2651将始终四舍五入到0.27

四舍五入到两位小数时。

有趣的是在0.2650的情况下会发生什么:默认情况下,使用MidpointRounding.ToEven可以得到:

  • 0.26对于Math.Round(0.2650, 2)
  • 0.28用于Math.Round(0.2750, 2)

这是因为四舍五入后是朝着最有效的偶数位进行的(第一种情况下为6,第二种情况为8)。

然而,如果你使用MidpointRounding.AwayFromZero,你会得到:

  • 0.27用于Math.Round(0.2650, 2, MidpointRounding.AwayFromZero)
  • 0.28用于Math.Round(0.2750, 2, MidpointRounding.AwayFromZero)

所有小数位都会被考虑在内。取整0.265000001m将得到0.27以及

如果您不想要第4位小数,那么只需在四舍五入之前使用Math.Truncate

Math.Truncate(0.2651m * 1000) / 1000; //0.265
Math.Truncate(0.2650m * 1000) / 1000; //0.265