gpt4 book ai didi

.net - 为什么使用 MidpointRounding.AwayFromZero 四舍五入的 0.5 结果为 0?

转载 作者:行者123 更新时间:2023-12-04 17:55:15 28 4
gpt4 key购买 nike

为什么这会导致 0 而不是 1?

Math.Round(0.5, 0, MidpointRounding.AwayFromZero)

这是一个例子: http://ideone.com/ayMVO

最佳答案

通常,对于此类问题,这是因为数字无法在 IEEE754 中准确表示 - 很可能它被转换为 0.4999999999 ......或类似的东西,它会四舍五入为零。

然而,0.5 (1/2) 在 IEEE754 中是完全可以表示的,所以这里不是这种情况。

编译器可能在将文本转换为数字时犯了一个错误,但我认为这不太可能。事实上,当我在 VC#2010 中编译并运行以下代码时:

using System;
namespace ConsoleApplication1 {
class Program {
static void Main (string[] args) {
Console.WriteLine (Math.Round (0.5, 0, MidpointRounding.AwayFromZero));
}
}
}

我得到 1 的输出正如预期的那样。

所以我不认为你的问题很完整。现在可能是你的实际情况没有使用硬编码值 0.5而是使用您认为是 0.5 的变量。

我对此的回答是,虽然它可能接近 0.5(当然足够接近它的简单 WriteLine 可能会输出 0.5),但它可能会低于 0.5,这会导致我在上面第一段中的评论再次踢球。

根据您的链接,Mono 2.8 似乎存在错误。我建议寻求开发人员的支持(或只是提出错误报告) here .

实际上,在本地使用 gmcs 2.6.7 进行了尝试,这绝对是一个错误。那个确切的代码编译没问题,但生成 0 而不是 1。A bug report已经提出,我已经添加了我自己的信息。

关于.net - 为什么使用 MidpointRounding.AwayFromZero 四舍五入的 0.5 结果为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9475448/

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