【发布时间】:2010-11-01 22:39:27
【问题描述】:
在 C# 中,Math.Round(2.5) 的结果是 2。
应该是3,不是吗?为什么在 C# 中是 2?
【问题讨论】:
-
其实是一个特性。请参阅 msdn.microsoft.com/en-us/library/…MSDN 文档。这种舍入称为银行家舍入。至于解决方法,有 msdn.microsoft.com/en-us/library/…overload 允许调用者指定如何进行舍入。
-
显然 round 方法,当被要求在两个整数之间精确地舍入一个数字时,返回偶数。所以,Math.Round(3.5) 返回 4。见this article
-
Math.Round(2.5, 0, MidpointRounding.AwayFromZero); -
SQL Server 以这种方式循环;当有一个 C# 单元测试 ti 验证在 T-SQL 中完成的舍入时,有趣的测试结果。
-
@amed 这不是错误。这是二进制浮点的工作方式。
1.005不能完全用双精度表示。可能是1.00499...。如果你使用Decimal,这个问题就会消失。 Math.Round 重载在 double 上采用多个小数位的存在是 IMO 一个可疑的设计选择,因为它很少以有意义的方式工作。