如何在python中获取确切的float值?

时间:2018-06-25 07:24:53

标签: python floating-point precision

我有一个浮点数列表。我需要对这些数字执行某些加法和乘法运算,并且代码的逻辑要求确切的答案(例如,与同一列表中的其他数字进行比较)。但是它并没有给出确切的答案。对于类似问题的解决方案的搜索建议使用十进制类。同样的问题仍然存在。下面是一个示例:

from decimal import Decimal
Decimal(1.2)*Decimal(2)
Decimal('2.399999999999999911182158030')

2 个答案:

答案 0 :(得分:1)

问题在于,Decimal(1.2)使用1.2的浮点值来获取准确的值。使用字符串代替使用确切的值并获得所需的结果:

>>> from decimal import Decimal
>>> Decimal(1.2)
Decimal('1.1999999999999999555910790149937383830547332763671875')
>>> Decimal("1.2")
Decimal('1.2')
>>> Decimal("1.2")*Decimal("2")
Decimal('2.4')

答案 1 :(得分:0)

如果您想使用decimal模块,请相应地设置preciscion。 示例:

from decimal import Decimal
from decimal import getcontext

# your code without setting 'prec'
print('Precision :', getcontext().prec)
a = Decimal(1.2) * Decimal(2)
print('result :', a)

# setting 'prec' to 16
getcontext().prec = 16
print('Precision :', getcontext().prec)
a = Decimal(1.2) * Decimal(2)
print('result :', a)

输出:

Precision : 28
result : 2.399999999999999911182158030
Precision : 16
result : 2.400000000000000

有关更多信息,请参见decimal module documentation