【问题标题】:One more time - consistently rounding up from 0.5. 0.49, 0.444449 etc. in Python再一次 - 始终从 0.5 向上取整。 Python 中的 0.49、0.444449 等
【发布时间】:2019-09-06 14:46:17
【问题描述】:

所以我正在尝试构建一个前端,我假设用户会期望“学校四舍五入”,例如从值 >= 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

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

【问题讨论】:

  • 你的学校教你四舍五入 3.4444...49 是 4?我记得在四舍五入时你应该只考虑最后一个有效数字。
  • 已经有一段时间了,所以我不确定我的学校到底教了我什么,但这就是我周围的大多数人在谈到“四舍五入”时的意思。无论如何,您定义中的最后一个重要数字是多少?
  • 这里也很长一段时间,但我很肯定你的Num 四舍五入到整数会变成 33(33.497... 显然小于 33.5,这是四舍五入的最小数字(如学校所教)到 34)。由于 ...497 后有 5 个,因此使用 3 位小数将四舍五入为 33.498
  • 无论哪种方式都可以看到。始终从一半向上取整也可以解释为适用于后续数字。我认为这些只是区域公约。

标签: python-3.x


【解决方案1】:

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

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

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

如果要在逗号后四舍五入到特定部分:

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

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多