具有中点舍入的Math.Round

时间:2015-12-05 19:52:57

标签: c# rounding

此示例代码产生意外结果

decimal s = 463.815M;
decimal a = Math.Round(s, 2, MidpointRounding.AwayFromZero);
decimal b = Math.Round(s, 2, MidpointRounding.ToEven);

decimal t = 4.685M;
decimal c = Math.Round(t, 2, MidpointRounding.AwayFromZero);
decimal d = Math.Round(t, 2, MidpointRounding.ToEven);

Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(d);

Console.Read();

produces

463.82
463.82
4.69
4.68

我原本期望 a c 增加1,c确实会增加,但令我惊讶的是没有。有人可以解释这个原因吗?

[更新

预计a和c的结果与:

相同
  • a具有.81 5 且c在最后也具有.68 5 ,即 5
  • a和c都使用MidpointRounding.AwayFromZero

1 个答案:

答案 0 :(得分:2)

这是预期的结果,因为0.815分数向上舍入为0.82。当你舍入到偶数时会发生同样的事情,因为2是偶数。

如果您使用0.825作为分数,结果会有所不同:

decimal s = 463.825M;
decimal a = Math.Round(s, 2, MidpointRounding.AwayFromZero);
decimal b = Math.Round(s, 2, MidpointRounding.ToEven);

现在代码prints

463.83
463.82

说明MidpointRounding.AwayFromZeroMidpointRounding.ToEven之间的区别。