浮点和小数.十进制计算



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

您正试图将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')

希望这能有所帮助!:)

will的答案很准确,我也遇到了同样的问题,解决方案是:将两个值转换为浮点类型并相乘:

result = float(value1) * float(value2)

然后将结果再次转换为十进制,并使用四舍五入对小数位数进行四舍五进:

import decimal
final_result = round(decimal.Decimal(result), 2)

最新更新