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