【问题标题】:python 2.7 string format to decimal as round functionpython 2.7字符串格式到十进制作为舍入函数
【发布时间】:2012-11-14 15:57:48
【问题描述】:

我在字符串格式函数中遇到了一个我不明白的问题。请帮助解释为什么以及如何解决这个问题。谢谢。 (python 2.7.3,linux2 上的 [GCC 4.6.3],ubuntu 12.04 x86)

>>> import locale
>>> locale.format("%0.{0}f".format(2), 1.135, grouping=True)
'1.14'
>>> locale.format("%0.{0}f".format(2), 1.125, grouping=True)
'1.12'

>>> ("%0.2f")%(1.135)
'1.14'
>>> ("%0.2f")%(1.125)
'1.12'

我需要格式结果来匹配round()函数

>>> round(1.135, 2)
1.14
>>> round(1.125, 2)
1.13

谢谢大家。

【问题讨论】:

  • 打印前为什么不先四舍五入呢?
  • 所以,有趣的是,在我的 python3 构建中,round() 返回与字符串格式匹配的结果。

标签: python string format rounding


【解决方案1】:

这是因为四舍五入并不是简单地将大于 5 的最后一位数字向上,同时截断小于 4 的数字,因为这种方法会增加四舍五入数字的预期平均值。

解决方案是使用Bankers' Rounding,这就是您在此处看到的。

【讨论】:

  • 这并不能回答问题:为什么圆形和格式之间存在差异。据我所知,这是无法以二进制格式准确表示十进制数以及两个函数中使用的舍入算法的组合。
  • Bankers Rounding 非常酷——但这不是 Python 2.7 正在做的事情(至少在我的机器上!)例如我尝试了 0.605、0.615、0.625、0.635 等,只有 0.625 未能四舍五入。 OP 的问题是 1/8;这是 5/8;嗯....
猜你喜欢
  • 1970-01-01
  • 2021-10-18
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
相关资源
最近更新 更多