首页 > 解决方案 > 在浮点变量中转换字符串格式返回错误值

问题描述

我正在编写一个代码来将 0 到 1 之间的二进制数转换为十进制。我编写了代码,用 0.1(相当于十进制的 0.5)进行了测试,它工作正常。当我用 0.01 和 0.001 测试它时,我得到了错误的答案(尽管很接近)。我去找了python导师,发现在进行第二次迭代时,它将无法将0.1浮点数转换为字符串。它将返回“0.09999999999999964”。还有其他方法可以进行这种转换吗?

这是一种来自数值方法转换的算法。

标签: pythoncasting

解决方案


该错误是由浮点舍入错误引起的。您可以选择使用以下方法对字符串进行四舍五入format

str(0.1 + 0.2)
# => ''0.30000000000000004'

'{:.10f}'.format(0.1 + 0.2)
# => '0.3000000000'

格式字符串.10f告诉format您想要一个精度为 10 位的浮点数。


或者,您可以使用更精确的数字表示,例如decimal

from decimal import Decimal
str(Decimal('0.1') + Decimal('0.2'))
# => '0.3'

请注意如何将0.10.2放在引号中以使它们成为字符串,这样它们就不会被转换为float错误的值。


推荐阅读