【问题标题】:python floating point, why is the print result different (examples given)?python浮点,为什么打印结果不同(给出的例子)?
【发布时间】:2017-02-24 19:20:51
【问题描述】:

a = (random.random(), random.random())

打印(一)

打印(a[0])

结果是:

(0.4817527913069962, 0.7017598562799067)

0.481752791307

打印元组(列表的类似行为)背后发生了什么额外的事情?为什么会有多余的分数?

非常感谢。

顺便说一句,这是 python 2.7

【问题讨论】:

标签: list printing floating-point tuples precision


【解决方案1】:

您看到的是str(float)repr(float) 所做的格式选择之间的差异。在 Python 2.x 中,str(float) 返回 12 位,而 repr(float) 返回 17 位。在其交互模式下,Python 使用str() 来格式化结果。这说明了格式化浮点数时的 12 位精度。但是当结果是元组或列表时,字符串格式化逻辑使用repr() 来格式化每个元素。

repr(float) 的输出必须能够转换回原始值。使用 17 位精度可以保证这种行为。 Python 3 使用一种更复杂的算法,该算法返回最短的字符串,该字符串将往返返回原始值。由于repr(float) 经常返回更友好的出现结果,str(float) 被更改为与repr(float) 相同。

【讨论】:

  • 顺便说一句,Python 2.7 对 float repr 使用与 Python 3 相同的算法。只有 Python 2.6 及更早版本会基于 17 位有效数字构造 repr。
猜你喜欢
  • 1970-01-01
  • 2020-10-15
  • 2013-01-31
  • 1970-01-01
  • 2021-03-14
  • 2011-01-21
  • 2019-04-19
  • 2010-10-29
相关资源
最近更新 更多