浮点数和十进制。十进制计算

时间:2017-02-06 20:15:41

标签: python vba variables decimal declaration

我是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))

1 个答案:

答案 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')

希望这有帮助! :)