python-3.x - 再一次 - 始终从 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
现在我想我可以编写一个函数,就像你在学校学到的一样,即从最后一个数字开始,一直到小数点,但这似乎非常低效和复杂。真的没有更好的方法或方案来实现这个看似微不足道的结果吗?
解决方案
您可以通过将 0.5 添加到浮点数来轻松舍入,并通过强制转换为 int 来消除零。这是四舍五入的正确方法
>>> Num = 33.497536945812804
>>> int(Num + 0.5)
33
这就是我在学校学会四舍五入的方法。以这种方式舍入您不会得到浮点舍入错误。
如果要在逗号后四舍五入到特定部分,请执行以下操作:
>>> int(Num*1000 + 0.5)/1000
33.498
推荐阅读
- postgresql - 如何在没有 pg_dump 的情况下将我的所有表从 Postgres 数据库复制到另一个?
- javascript - 如何调整模态框的大小?
- java - spring boot 中创建预定方法的最佳实践
- python-3.x - python Osmnx上的RuntimeError
- html - 侧面固定菜单在 div 下方重叠
- cmd - 等到程序启动
- python - 使用python比较excel中的两列和颜色更大?
- python - imageio:AttributeError:“模块”对象没有属性“imread”
- python - 创建类的静态属性(属性是同一类的实例)
- wmi - 如何使用 WMI 获取基板的序列号?