似乎默认的 Python round(1 / 2)
给出 0。
如何将 float 0.5 舍入到 1.0,同时仍然将 0.45 舍入到 0.0,就像通常的学校舍入一样?
注意:很抱歉删除并再次发布它,但它被错误地标记为另一个问题的重复项。
原文由 EquipDev 发布,翻译遵循 CC BY-SA 4.0 许可协议
似乎默认的 Python round(1 / 2)
给出 0。
如何将 float 0.5 舍入到 1.0,同时仍然将 0.45 舍入到 0.0,就像通常的学校舍入一样?
注意:很抱歉删除并再次发布它,但它被错误地标记为另一个问题的重复项。
原文由 EquipDev 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
2 回答1.9k 阅读✓ 已解决
实际上目前认为不盲目地将 *.5 向上舍入是合适的。相反,将 *.5 舍入到最接近的偶数是合适的。 Python 3 实现了这种“适当”形式的“银行家舍入”,但许多其他语言(还)没有。盲目向上舍入 *.5 会产生轻微偏差,但“银行家舍入”有助于平衡它。有关详细信息,请参阅 此线程。所以…
方法一
您可以有条件地使用
ceil(...)
函数(来自 数学模块 的舍入方面。您必须有条件地执行此操作,以便还保持小于 0.5 的值的常规舍入行为。尝试类似以下内容(请注意,这不是非常可靠,因为它只适用于正值……不过它应该能够很容易地适应正值和负值):请注意
ceil(...)
函数将返回一个整数,而不是一个浮点数。这不应该是一个主要问题,但现在你知道了。方法二
从我上面链接的帖子来看,另一种选择似乎是使用 decimal 模块来模拟舍入行为的“旧”方式。我有点从那里复制和粘贴,但在这里你去:
据说
decimal.ROUND_HALF_UP
舍入形式就是您要找的。这样您就不必有条件地使用ceil(...)
函数。我猜这被标记为另一个的重复,因为稍微挖掘一下就会为您提供关于该主题的足够多的信息。 (我没有将其标记为重复,我只是假设这就是其他人这样做的原因。)