浮点数和小数。小数计算

Lid*_*aaa 1 python variables vba declaration decimal

我是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
Run Code Online (Sandbox Code Playgroud)

但当我这样做时:

ccc= aa*b 
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误

我需要一种方法来对所有 Decimal('') 数字执行数学运算或使浮点数字更准确(没有额外的十进制数字(0.0016 而不是 0.0015999996))

Wil*_*ill 6

您试图将 afloat与 a相乘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')
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!:)