为什么str(漂浮)在Python 3中比Python 2返回更多的数字

  

在Python 2.7中,一个浮动的repr返回最接近十七位数的十进制数,这足以精确地识别每个可能的IEEE浮点值。浮点数的str类似地工作,除了它将结果限制为12位数;对于大多数目的,这是一个更合理的结果,并且使您免受二进制和十进制表示之间的微小差异。

  

Python 2演示:http://ideone.com/OKJtxv

        打印str (1.4 * 1.5)   2.1   打印repr (1.4 * 1.5)   2.0999999999999996      

在Python 3.2中,出现str和repr返回相同的事情。

  

Python 3演示:http://ideone.com/oAKRsb

        打印(str (1.4 * 1.5))   2.0999999999999996   print (repr (1.4 * 1.5))   2.0999999999999996      

是否有描述变更的PEP或某人负责的其他声明吗?

  

不,没有活力。错误跟踪器中有一个问题,在Python开发人员邮件列表中有一个讨论有关

  

。虽然我负责提出和实施变革,但我不能说这是我的想法:它是在2010年EuroPython与圭多对话时产生的。

  

一些更多的细节:如评论中已经提到的,Python 3.1为浮动的字符串repr引入了一个新的算法(后来被转载到Python 2系列,这样它也出现在Python 2.7中)。作为这种新算法的结果,在提示符下键入的“短”十进制数具有相应的较短的表示。这消除了str和repr之间的差异的现有原因之一,并且使得可以对str和repr使用相同的算法。所以对于Python 3.2,按照上面的讨论,str和repr是相同的。至于为什么:它使语言变得更小更干净,并且当输出字符串时,它会删除12位数字的相当随意的选择。(在2.7之前的Python版本中用于repr的17位数字的选择远不是任意的,顺便说一下:两个不同的IEEE 754 binary64浮点数将在转换为十进制时具有不同的表示,17位有效数字,17岁是最小的整数与此属性。)

  

除了简单,还有一些不那么明显的好处。过去令用户混淆repr对str的区别的一个方面是repr自动被用于容器。所以例如在Python 2.7中:

        在在在x=1.4 * 1.5   在在在打印x   2.1   在在在打印[x]   (2.0999999999999996)      

我确定至少有一个StackOverflow问题询问这个现象:这里是>   在在在x=1.4 * 1.5   在在在打印(x)   2.0999999999999996   在在在打印([x])   (2.0999999999999996)      

这是至少更一致的。

  

如果您确实希望能够隐藏不精确,正确的方法仍然保持不变:使用字符串格式来精确控制输出格式。

        在在在打印(“{:.12g}”.format (x))   2.1      

我希望能够解释这一变化背后的一些原因。我不会认为这是普遍有益的:正如你所指出的那样,旧的str具有隐藏不精确的方便的副作用。但是在我看来(当然我有偏见),它确实有助于消除语言中的一些惊喜。

  

  

以上所述是小编给大家介绍的为什么str(漂浮)在Python 3中比Python 2返回更多的数字,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

为什么str(漂浮)在Python 3中比Python 2返回更多的数字