首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Python3String函数会降低浮点数的精度?

为什么Python3String函数会降低浮点数的精度?
EN

Stack Overflow用户
提问于 2018-12-12 19:29:57
回答 1查看 164关注 0票数 1

在Python (3.6.7) Ubuntu 18上的交互式shell中,这两个

代码语言:javascript
复制
>>> n = str(3.140000000000000124344978758017532527446746826171875)
>>> print(n)

代码语言:javascript
复制
>>> print(3.140000000000000124344978758017532527446746826171875)

产率3.14.而

代码语言:javascript
复制
>>> print('3.140000000000000124344978758017532527446746826171875')

产率3.140000000000000124344978758017532527446746826171875

为什么会这样呢?

注意:我不是在问浮点数为什么会失去精确性,特别是为什么str(n)'n' (引号)的使用在print()中的行为有所不同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-14 11:16:58

在第1和第2种情况下,您所操作的是浮点对象。

代码语言:javascript
复制
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

一个更清楚的例子:

代码语言:javascript
复制
>>> str(3.140000000000000123)
'3.14'

>>> str(3.14000000000000123)
'3.140000000000001'

>>> print(3.14000000000000123)
3.140000000000001
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53750099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档