我正在研究数学程序,但我有一个非常大的问题。所以在我的程序做了一些数学运算之后,它会将结果四舍五入。

一切正常,但如果 result == 2.49999999999999992 ,round 函数返回 3.0 而不是 2.0

我该如何解决?

谢谢。

最佳答案

正如@Pavel Anossov 在他的评论 there's no such thing as 2.49999999999999992 in IEEE 754, 2.49999999999999992 == 2.5. 中所说。浮点数可能始终对您的计算至关重要,因为在任何情况下(32/64/128 位浮点数),您都有一个精度限制。这显然也受限于 Python 浮点数。

有不同的选择来处理这个问题,你可以例如使用 decimal 库:

>>> from decimal import *
>>> getcontext().prec = 6
>>> Decimal(1) / Decimal(7)
Decimal('0.142857')
>>> getcontext().prec = 28
>>> Decimal(1) / Decimal(7)
Decimal('0.1428571428571428571428571429')

在这种情况下,可以自己设置精度。 decimal 在标准库中。

还有像 bigfloat 这样的第三方库,你可以使用(我没有使用它的经验):
>>> from bigfloat import *
>>> sqrt(2, precision(100))  # compute sqrt(2) with 100 bits of precision

但如您所见,您始终必须选择精度。如果您真的不想失去任何精度,请使用 fractions (也在标准库中):
>>> from fractions import Fraction
>>> a = Fraction(16, -10)
>>> a
Fraction(-8, 5)
>>> a / 23
Fraction(-8, 115)
>>> float(a/23)
-0.06956521739130435

关于python - 为什么 round(2.49999999999999992) 返回 3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18174377/

10-13 06:37