2

使用 Math.Round 时,在进行“四舍五入”时是否考虑所有小数位,还是仅考虑我们四舍五入到的小数位右侧的数字?

例子;

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

3 回答 3

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)
于 2013-02-05T08:37:12.440 回答
0

考虑所有小数位。四舍五入 0.2650000001m 也将导致 0.27

于 2013-02-05T08:43:53.053 回答
0

如果您不想要第 4 位小数,则只需Math.Truncate在舍入前使用:

Math.Truncate(0.2651m * 1000) / 1000; //0.265
Math.Truncate(0.2650m * 1000) / 1000; //0.265
于 2013-02-05T08:39:43.703 回答