在Python (3.6.7) Ubuntu 18上的交互式shell中,这两个
>>> n = str(3.140000000000000124344978758017532527446746826171875)
>>> print(n)和
>>> print(3.140000000000000124344978758017532527446746826171875)产率3.14.而
>>> print('3.140000000000000124344978758017532527446746826171875')产率3.140000000000000124344978758017532527446746826171875
为什么会这样呢?
注意:我不是在问浮点数为什么会失去精确性,特别是为什么str(n)和'n' (引号)的使用在print()中的行为有所不同。
发布于 2018-12-14 11:16:58
在第1和第2种情况下,您所操作的是浮点对象。
f = 3.140000000000000124344978758017532527446746826171875
# In case 1
print(str(f))
# In case 2
print(f)str(f)将浮点对象转换为字符串,print(f)表示print(repr(f)),repr(f)也将浮点对象转换为字符串。
在第3种情况下,您所操作的是一个字符串对象,它包含53个字符,
将浮点对象转换为字符串时发生了什么?
str(f)和repr(f)调用相同的函数重现。
在函数float_repr中,如果没有指定精度参数,则浮点数对象将被转换为具有双精度浮点格式的字符串。
双精度浮点格式提供15到17位有效的十进制数字的精度.
因此,在这种情况下,有效十进制数字的精度为16,3.140000000000000124344978758017532527446746826171875将被转换为3.140000000000000。
一个更清楚的例子:
>>> str(3.140000000000000123)
'3.14'
>>> str(3.14000000000000123)
'3.140000000000001'
>>> print(3.14000000000000123)
3.140000000000001https://stackoverflow.com/questions/53750099
复制相似问题