浮点数字符串格式中的Python精度

发布于 2021-01-29 16:53:53

我不明白为什么通过格式化包含浮点值的字符串来不尊重最后一个精度的原因。即:

'%f' % 38.2551994324

返回:

'38.255199'

(丢失了4个信号!)

目前,我解决了指定问题:

'%.10f' % 38.2551994324

它会按预期返回‘38
.2551994324’…但是我真的应该手动强制我想要多少个十进制数字吗?有没有办法简单地告诉python保留所有这些?(例如,如果我不知道我的数字有多少个小数,该怎么办?)

关注者
0
被浏览
225
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    但是我真的应该手动强制要多少个十进制数字吗? 是。

    即使指定了10个十进制数字,您仍然不能全部打印。无论如何,浮点数没有这种精度,它们大多是十进制数的 近似值
    (它们实际上是加起来的二进制分数)。尝试这个:

    >>> format(38.2551994324, '.32f')
    '38.25519943239999776096738060005009'
    

    还有 很多 甚至没有指定的小数。

    当格式化浮点数(无论是与'%f' % number'{:f}'.format(number)format(number, 'f')),一个
    默认的 显示小数位数。这与使用str()(或'%s' % number'{}'.format(number)format(number),实际上是str()在幕后使用)时没有什么不同,只有默认情况下包含的小数位数有所不同;Python版本之前3.2使用12位
    的整数 使用时str()

    如果您希望有理数计算可以使用 特定的精确
    数字位数,则不要使用浮点数。使用decimal.Decimal类型代替:

    • 十进制“基于浮点模型,该浮点模型是为人而设计的,并且必然具有最重要的指导原则–计算机必须提供一种与人们在学校学习的算法相同的算法。”
      –摘自十进制算术规范。

    • 小数可以精确表示。相比之下,类似1.1和的数字2.2在二进制浮点数中没有确切的表示形式。最终用户通常不会期望1.1 + 2.23.3000000000000003二进制浮点那样显示。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看