【发布时间】:2018-09-11 13:58:47
【问题描述】:
使用decimal时,为什么舍入的行为总是一样的?
无论我是否使用MidpointRounding.AwayFromZero,它总是给出1.04。第一种情况,输出不应该是1.03吗?
Console.WriteLine(decimal.Round(1.035m, 2));
Console.WriteLine(decimal.Round(1.035m, 2, MidpointRounding.AwayFromZero));
【问题讨论】:
-
docs 包含一个有用的表格,说明
ToEven和AwayFromZero的结果何时相同(何时不同)。要四舍五入到1.03,它需要向零四舍五入,而Round没有实现。 (Truncate可以,但没有小数参数。) -
@JeroenMostert 我现在明白了,
MidpointRounding.ToEven将始终尝试四舍五入,所以在2.5的情况下,它将是 2,因为 2 是偶数,而不是 3,因为 3 不是甚至。