gpt4 book ai didi

.net - 需要帮助四舍五入到小数点后两位

转载 作者:行者123 更新时间:2023-12-03 12:05:21 25 4
gpt4 key购买 nike

为什么当我执行以下操作时...

Math.Round(0.75, 1, MidpointRounding.AwayFromZero)

我得到0.8

但是当我执行以下操作时...
Math.Round(0.575, 2, MidpointRounding.AwayFromZero)

我没有得到0.58。相反,我得到0.57。我想要的是5以上的值,因此0.575应该是0.58。

最佳答案

问题是您不能精确地将0.575表示为二进制浮点数(例如, double 数)。尽管我不清楚,但最接近的表示形式似乎可能要低一些,因此在四舍五入时会使用真实的表示形式并向下取整。

如果要避免此问题,请使用更合适的数据类型。 decimal将执行您想要的操作:

Math.Round(0.575M, 2, MidpointRounding.AwayFromZero)

结果: 0.58
0.75做正确的事情的原因是它很容易用二进制浮点表示,因为它是简单的1/2 + 1/4(即2 ^ -1 + 2 ^ -2)。通常,任何二的幂的有限和都可以用二进制浮点表示。异常(exception)是当您的2的幂跨度太大时(例如2 ^ 100 + 2不能精确表示)。

编辑添加:

Formatting doubles for output in C#可能对理解为什么很难理解0.575不是0.575感兴趣。接受的答案中的DoubleConverter将显示0.575作为精确字符串是 0.5749999999999999555910790149937383830547332763671875您可以从中看到为什么舍入给出0.57。

关于.net - 需要帮助四舍五入到小数点后两位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12113096/

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