【发布时间】: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