Mic*_*ael 3 python rounding python-2.7
我正在研究数学课程,我有一个很大的问题.所以在我的程序做了一些数学运算后,它会对结果进行舍入.
一切正常,但如果result == 2.49999999999999992 圆函数返回3.0而不是2.0.
我该如何解决这个问题?
谢谢.
正如@Pavel Anossov在评论中所说there's no such thing as 2.49999999999999992 in IEEE 754, 2.49999999999999992 == 2.5..Float可能永远对您的计算至关重要,因为在任何情况下(32/64/128位浮点),您都有精度限制.这显然也限于Python浮点数.
有不同的选项来处理,你可以使用例如十进制库:
>>> from decimal import *
>>> getcontext().prec = 6
>>> Decimal(1) / Decimal(7)
Decimal('0.142857')
>>> getcontext().prec = 28
>>> Decimal(1) / Decimal(7)
Decimal('0.1428571428571428571428571429')
Run Code Online (Sandbox Code Playgroud)
在这种情况下,可以自己设置精度.decimal在标准库中.
还有像bigfloat这样的第三方库,你可以使用(我没有经验):
>>> from bigfloat import *
>>> sqrt(2, precision(100)) # compute sqrt(2) with 100 bits of precision
Run Code Online (Sandbox Code Playgroud)
但正如您所看到的,您始终必须选择精度.如果你真的不想丢失任何精度,请使用分数(也在标准库中):
>>> from fractions import Fraction
>>> a = Fraction(16, -10)
>>> a
Fraction(-8, 5)
>>> a / 23
Fraction(-8, 115)
>>> float(a/23)
-0.06956521739130435
Run Code Online (Sandbox Code Playgroud)