如何解决“ 3*10**(0) + 8*10**(-1) + 5*10**(-2) + 2*10**(-3) 不等于 3.852 ”?

How to fix " 3*10**(0) + 8*10**(-1) + 5*10**(-2) + 2*10**(-3) do not equal 3.852 "?

我有 number_list ['3', '.', '8', '5', '2'] 并尝试通过

转换回 3.852
>>> 3*10**(0) + 8*10**(-1) + 5*10**(-2) + 2*10**(-3)
3.8519999999999994

为什么我得到的是 3.8519999999999994,而不是 3.852?如何解决? 部分计算独立进行。

>>> 3*10**(0)
3
>>> 8*10**(-1)
0.8
>>> 5*10**(-2)
0.05
>>> 2*10**(-3)
0.002

如果您希望结果在小数点后 3 位以内,您可以使用 python 内置函数 round

expression = 3*10**(0) + 8*10**(-1) + 5*10**(-2) + 2*10**(-3)
round(expression, 3)

您可以使用字符串连接和解析输出字符串来解决此问题。

示例:

number_list = ['3', '.', '8', '5', '2']
parsed_number = float("".join(number_list))
print(parsed_number)
# Output: 3.852