我是python的新手,我正在将程序从VBA Excel重写为Python。
我需要准确的计算,但无法找到合适的方法。
示例:
aa = 0.000016
bb = 0.000016
cc = aa*bb # which gives 2.5599999999999996e-12
a = decimal.Decimal('0.0000016')
b = decimal.Decimal('0.0000016')
c = a*b # which gives 2.56E-12
但是当我这样做时:
ccc= aa*b
它给了我一个错误
我需要一种方法来使用所有十进制('')数字执行数学运算或使浮点数更准确(没有额外的十进制数(0.0016而不是0.0015999996))
答案 0 :(得分:2)
您试图将float
乘以引发TypeError的decimal.Decimal
。为了将它们相乘,你必须抛出其中一个,使它们是相同的类型,python可以确定结果应该是什么类型。
>>> import decimal
>>> d = decimal.Decimal("0.000016") # d is a Decimal
>>> f = 0.000016 # f is a float
>>> d*f # can't do this!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'Decimal' and 'float'
>>> float(d) * f # cast d to a float, get a float result
2.56e-10
>>> d * decimal.Decimal(f) # cast f to Decimal, get a Decimal result
Decimal('2.559999999999999884155166274E-10')
希望这有帮助! :)