我有一个浮点数的列表。我需要对这些数字执行某些加法和乘法运算,而代码的逻辑需要精确的答案(例如,与同一列表中的其他数字进行比较)。但它并没有给出精确的answer.The搜索方法来解决类似的问题,建议使用十进制类。同样的问题依然存在。下面是一个例子:
from decimal import Decimal
Decimal(1.2)*Decimal(2)
Decimal('2.399999999999999911182158030')发布于 2018-06-25 08:25:01
问题是,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')发布于 2018-06-25 07:38:28
如果您喜欢使用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有关更多信息,请参见十进制模块文档
https://stackoverflow.com/questions/51018201
复制相似问题