gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:36:37 24 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 的重载:

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

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

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

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