gpt4 book ai didi

c# - Math.Round 错误 81.725 MidpointRounding.AwayFromZero = 81.72

转载 作者:太空宇宙 更新时间:2023-11-03 23:00:41 25 4
gpt4 key购买 nike

我有一个 Math.Round 的错误,没有任何解释。当我做

Math.Round(81.725, 2, MidpointRounding.AwayFromZero)

结果是 81,72 但是当我用 Decimal.Round 做同样的事情时

Decimal.Round(81.725M, 2, MidpointRounding.AwayFromZero)

结果是81,73

我不明白为什么,你有系统地使用 Math.Round 的解决方案吗?

最佳答案

在了解 double 的工作原理以及与 decimal 的区别之前,您不应该谈论 bug 来解释您所看到的行为.

double 是具有以下结构的实数的最佳近似值:

number = sign * mantissa * 2 ^ exponent

因此,当表示为 double 时,数字 81.725 实际上是:

1 * 2875442808959795 * 2^-45 = 81,724999999999994315658113919199

现在您应该明白为什么 Math.Round(81.725, 2) 解析为 81.72 而不是 81.73

decimal 不会发生这种情况,因为 decimaldouble 相反,它可以精确表示 81.725。这是因为 decimal 中的比例因子是 10 的幂。

这种增加的精度显然是以速度、空间和范围为代价的。何时选择一种或另一种类型在评论中提供的另一个 SO 问题的链接中得到了很好的解释。

关于c# - Math.Round 错误 81.725 MidpointRounding.AwayFromZero = 81.72,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43226142/

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