【发布时间】:2013-03-02 14:08:30
【问题描述】:
以下适用:
var rounded = Decimal.Round(7.635m, 2);
//rounded: 7.63
对我来说,这是错误且出乎意料的行为。我会假设 rounded 的值为 7.64。
为此,我可以做到:
var rounded = Decimal.Round(7.635m, 2, MidpointRounding.AwayFromZero);
//rounded: 7.64
这不是怎么会成为Decimal.Round的默认行为?有什么好的理由吗?
【问题讨论】:
-
看看stackoverflow.com/a/977807/525138,我觉得你不能改默认的。
-
我想他们选择了这个作为默认值,因为大多数小数的四舍五入都是在货币上完成的。不幸的是,它也是 double.Round() 的默认值,它确实填满了很多数学计算——尤其是与计算像素坐标有关的计算。
-
有没有人注意到默认的舍入到偶数在你的例子中舍入到奇数?!!我在一台机器上发现了这种(错误?)行为,但在另一台机器上却没有。 anody 知道发生了什么事吗?
-
很奇怪,因为在 .NET Core 中
decimal.Round(7.635m, 2);给出了7.64