在Python中什么条件下`str(float(val)) == val`不成立

问题描述 投票:0回答:1

对于像

val
这样的字符串
"1.2345"
变量,
assert str(float(val)) == val
总是成立吗?

我已经发现它并不总是成立

>>> str(float('1.2345'))
'1.2345'
>>> str(float('0.1231412314124124124124124124'))
'0.12314123141241241'

但是理论边界在哪里,如何推理在什么条件下左右边相等不成立?

python floating-point precision
1个回答
0
投票

str(float(val))
val
之间的差异源于计算机中浮点表示的有限精度。计算机使用二进制分数来存储浮点数,并且并非所有十进制分数都可以是精确的二进制表示,从而导致转换过程中出现较小的舍入误差。

在 Python 中,浮点数是双精度 64 位 IEEE 754 值,提供大约 15 位十进制数字的精度。当十进制字符串中的有效数字位数超过此精度时(例如,

'0.1231412314124124124124124124'
有 25 个有效数字),将其转换为浮点型再转换回字符串时会出现精度损失。

© www.soinside.com 2019 - 2024. All rights reserved.