【问题标题】:Python decimal roundingPython 小数舍入
【发布时间】:2012-09-12 05:37:40
【问题描述】:

意见 #18,20 controversial programming opinions

让我思考。所以我尝试将 pi 的值打印到小数点后 5 位。

没关系,因为我认为我肯定可以在 Python 中快速完成。在谷歌上几秒钟我就知道了Decimal module of Python 。 我完成了。休息是任何人都可以提出来总结系列以获得 Pi 值的基本逻辑。

>>>from decimal import *
>>>getcontext().prec = 6
>>>Decimal(22)/Decimal(7)

我写了上面的快速脚本只是为了检查我会得到什么。

但事情是这样的,getcontext().prec = 6 给了我一个四舍五入的值!

>>>3.14286

确切地说。

我想知道如何确保小数点后第 N 位不四舍五入?我的意思是,我希望答案是 3.14285

【问题讨论】:

  • 十进制没有四舍五入...它只是打印...你可以做"{0:0.6f}".format(Decimal(22)/Decimal(7))至少据我所知没有测试...
  • @JoranBeasley:你完全错了。十进制进行 舍入(或截断,具体取决于您在上下文中指定的行为)。这就是精度值的用途。试试'{:.50f}'.format(Decimal(22)/Decimal(7)),看看最后所有的零。
  • 好的,感谢您的纠正:) ...抱歉我的评论可能造成的任何混乱

标签: python decimal


【解决方案1】:

就像您使用 Decimal 上下文指定精度一样,您也可以指定舍入规则。

from decimal import *

getcontext().prec = 6 
getcontext().rounding = ROUND_FLOOR

print Decimal(22)/Decimal(7)

结果是

3.14285

http://docs.python.org/release/3.1.5/library/decimal.html#decimal.Context

【讨论】:

  • 非常感谢!我从来没有想过要搜索“地板”哈哈!
  • 如果您只想更改这部分代码的上下文,with localcontext() as ctx: ctx.prec=6; ctx.rounding = ROUND_FLOOR; print Decimal(22)/Decimal(7) 可能会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多