首页 > 解决方案 > 再一次 - 始终从 0.5 向上取整。Python 中的 0.49、0.444449 等

问题描述

因此,我正在尝试构建一个前端,我假设用户会期望“学校四舍五入”,例如从值 >= 5 进行四舍五入。但是,我很难获得适用于任意小数位数的一致解决方案。

我查看了一些答案,例如this one,但似乎没有一个提供我需要的解决方案。

举个例子:

Num = 33.497536945812804
from decimal import Decimal, getcontext, ROUND_HALF_UP
getcontext().rounding=ROUND_HALF_UP
# doesn't work:
round(Decimal(str(Num)))
>>> 33
# if I round to 1 decimal and round again, it works.
round(Decimal(str(round(Decimal(str(Num)), 1))))
>>> 34

现在我想我可以编写一个函数,就像你在学校学到的一样,即从最后一个数字开始,一直到小数点,但这似乎非常低效和复杂。真的没有更好的方法或方案来实现这个看似微不足道的结果吗?

标签: python-3.x

解决方案


您可以通过将 0.5 添加到浮点数来轻松舍入,并通过强制转换为 int 来消除零。这是四舍五入的正确方法

>>> Num = 33.497536945812804
>>> int(Num + 0.5)
33

这就是我在学校学会四舍五入的方法。以这种方式舍入您不会得到浮点舍入错误。

如果要在逗号后四舍五入到特定部分,请执行以下操作:

>>> int(Num*1000 + 0.5)/1000
33.498

推荐阅读