使用 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 位。
四舍五入不考虑小数点后第四位
这不是真的。
根据 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.2650000001m 也将导致 0.27
如果您不想要第 4 位小数,则只需Math.Truncate
在舍入前使用:
Math.Truncate(0.2651m * 1000) / 1000; //0.265
Math.Truncate(0.2650m * 1000) / 1000; //0.265