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