在 Ubuntu 18 上的 Python (3.6.7) 交互式 shell 中,两者都
>>> n = str(3.140000000000000124344978758017532527446746826171875)
>>> print(n)
和
>>> print(3.140000000000000124344978758017532527446746826171875)
产量3.14
。虽然
>>> print('3.140000000000000124344978758017532527446746826171875')
产量3.140000000000000124344978758017532527446746826171875
这是为什么呢?
注意;我不是问为什么 float 会失去精度,而是具体来说,为什么使用 str(n)
和 'n'
(引号)与 的行为不同打印()
。
最佳答案
在情况1和2中,您操作的是一个 float 对象
f = 3.140000000000000124344978758017532527446746826171875
# In case 1
print(str(f))
# In case 2
print(f)
而str(f)
将float对象转换为字符串,print(f)
表示print(repr(f))
, repr(f)
还将浮点对象转换为字符串。
在情况3中,你操作的是一个包含53个字符的字符串对象,
将浮点对象转换为字符串时发生了什么?
str(f)
和 repr(f)
调用相同的函数 float_repr .
在函数float_repr
中,如果没有指定精度参数,则float对象将被转换为 double 浮点格式的字符串。
double 浮点格式提供 15 到 17 位有效小数位精度。
因此,在本例中,有效十进制数字精度为 16,3.140000000000000124344978758017532527446746826171875
将转换为 3.140000000000000
。
一个更清晰的例子:
>>> str(3.140000000000000123)
'3.14'
>>> str(3.14000000000000123)
'3.140000000000001'
>>> print(3.14000000000000123)
3.140000000000001
关于python - 为什么Python 3字符串函数会降低 float 的精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53750099/