python – 为什么round(2.49999999999999992)返回3

我正在研究数学课程,我有一个很大的问题.所以在我的程序做了一些数学运算后,它会对结果进行舍入.

一切正常但如果结果== 2.49999999999999992,圆函数返回3.0而不是2.0.

我该如何解决这个问题?

谢谢.

最佳答案 正如@Pavel Anossov在他的评论中所说的那样,在IEEE 754,2.49999999999999992 == 2.5中没有2.49999999999999992这样的东西.浮点数对于你的计算可能总是至关重要的,因为在任何情况下(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
点赞