gpt4 book ai didi

.net - 为什么 Math.Round(2.5) 返回 2 而不是 3?

转载 作者:可可西里 更新时间:2023-11-01 09:16:20 25 4
gpt4 key购买 nike

在 C# 中,Math.Round(2.5) 的结果是 2。

应该是 3,不是吗?为什么在 C# 中是 2?

最佳答案

首先,无论如何这都不是 C# 错误 - 它会是 .NET 错误。 C# 是语言 - 它不决定 Math.Round 的实现方式。

其次,不 - 如果你阅读 the docs ,您会看到默认舍入是“四舍五入”(银行四舍五入):

Return Value
Type: System.Double
The integer nearest a. If the fractional component of a is halfway between two integers, one of which is even and the other odd, then the even number is returned. Note that this method returns a Double instead of an integral type.

Remarks
The behavior of this method follows IEEE Standard 754, section 4. This kind of rounding is sometimes called rounding to nearest, or banker's rounding. It minimizes rounding errors that result from consistently rounding a midpoint value in a single direction.

您可以使用 an overload 指定 Math.Round 应如何对中点进行舍入这需要 MidpointRounding值(value)。有一个带有 MidpointRounding 的重载对应于每个没有重载的重载:

这个默认值的选择是否正确是另一回事。 (MidpointRounding 仅在 .NET 2.0 中引入。在此之前,我不确定是否有任何简单的方法可以在不自己动手的情况下实现所需的行为。)特别是,历史表明它不是预期 行为 - 在大多数情况下,这是 API 设计中的主要错误。我可以理解 为什么 Banker's Rounding 很有用......但它仍然让许多人感到惊讶。

您可能有兴趣查看最近的 Java 等效枚举 (RoundingMode),它提供了更多选项。 (它不仅仅处理中点。)

关于.net - 为什么 Math.Round(2.5) 返回 2 而不是 3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/846911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com