提问人:zyxue 提问时间:11/4/2023 最后编辑:Peter Mortensenzyxue 更新时间:11/5/2023 访问量:76
在什么情况下 'str(float(val)) == val' 在 Python 中不成立?[复制]
Under what condition will `str(float(val)) == val` NOT hold in Python? [duplicate]
问:
对于像这样的字符串变量,总是成立吗?val
"1.2345"
assert str(float(val)) == val
我已经发现它并不总是成立
>>> str(float('1.2345'))
'1.2345'
>>> str(float('0.1231412314124124124124124124'))
'0.12314123141241241'
但理论边界在哪里?我们怎样才能推理出在什么条件下左边和右边的平等是不成立的呢?
答:
1赞
DepletedKnowledge
11/4/2023
#1
和之间的区别源于计算机中浮点表示的有限精度。计算机使用二进制分数来存储浮点数,并非所有十进制分数都可以是精确的二进制表示形式,从而导致转换过程中出现较小的舍入误差。str(float(val))
val
在 Python 中,浮点数是一个双精度 64 位 IEEE 754 值,提供大约 15 位十进制数字的精度。当十进制字符串中的有效位数超过此精度时(例如,有 25 位有效数字),在将其转换为浮点数并转换回字符串时会发生精度损失。'0.1231412314124124124124124124'
1赞
Frank Yellin
11/4/2023
#2
答案是否定的,这与IEEE或类似的东西无关。即使在无限精度的浮点计算机上(如果存在这样的东西),你也会遇到问题。
想想吧。“5.0”、“5.00”、“5”、“05.0”等在调用时都会返回完全相同的字符串。显然,其中只有一个会返回 x。str(float(x))
str(float(x))
评论
"0.00"
是一个微不足道的案例,它不成立。str(float('5'))
是。如上所述,也是. 是。因此,在各种情况下,这都不成立。5.0
str(float('5.00'))
5.0
str(float('.5'))
0.5