在float变量中转换字符串格式会返回错误的值

时间:2019-07-06 22:01:55

标签: python casting

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

这是数字方法转换的算法。

1 个答案:

答案 0 :(得分:2)

该错误是由浮点舍入错误引起的。您可以选择使用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并被舍入。

相关问题