我是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))
发布于 2017-02-09 03:29:58
您正在尝试将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')希望这能有所帮助!:)
发布于 2021-11-05 13:22:50
will的回答很精确,我也有同样的问题,解决方案是:将两个值都转换为浮点型和乘法:
result = float(value1) * float(value2)然后再次将结果转换为小数,并使用round对小数位数进行舍入:
import decimal
final_result = round(decimal.Decimal(result), 2)https://stackoverflow.com/questions/42076496
复制相似问题