gpt4 book ai didi

python - 如何像通常的学校舍入一样将 float 0.5 舍入到 1.0,同时仍将 0.45 舍入到 0.0?

转载 作者:行者123 更新时间:2023-12-03 11:48:37 26 4
gpt4 key购买 nike

看来默认的 Python round(1 / 2)给出 0。

如何像通常的学校舍入一样将浮点数 0.5 舍入到 1.0,同时仍将 0.45 舍入到 0.0?

注意:很抱歉再次删除并发布此问题,但它被错误地标记为另一个问题的重复。

最佳答案

实际上,目前认为不盲目地将 *.5 向上取整是合适的。相反,将 *.5 舍入到最接近的偶数是合适的。 Python 3 实现了这种“正确”形式的“银行家四舍五入”,但许多其他语言(目前)还没有。盲目地向上四舍五入 *.5 会产生轻微的偏差,但“银行家四舍五入”有助于平衡它。见 this thread了解更多信息。所以...

方法一

您可以有条件地使用 ceil(...)函数(来自 math module 用于四舍五入方面。您必须有条件地执行此操作,以便还保持小于 0.5 的值的常规舍入行为。尝试以下类似的操作(请注意,这不是非常健壮因为它只适用于正值......它应该能够很容易地适应正值和负值):

import math

val = 1.5
x = 0

if (float(val) % 1) >= 0.5:
x = math.ceil(val)
else:
x = round(val)

请注意, ceil(...)函数将返回一个整数,而不是浮点数。这不应该是一个大问题,但现在你知道了。

方法二

从我上面链接到的帖子中,看起来另一个选择是使用 decimal模块来模拟舍入行为的“旧”方式。我是从那里复制和粘贴的,但是你去:
import decimal

x = decimal.Decimal('1.5').quantize(decimal.Decimal('1'),
rounding=decimal.ROUND_HALF_UP)

据说 decimal.ROUND_HALF_UP四舍五入的形式是您正在寻找的。这样您就不必使用 ceil(...)有条件地发挥作用。

我猜这被标记为另一个的副本,因为稍微挖掘一下就会为您提供有关此主题的足够信息。 (我没有将其标记为重复,我只是假设这就是其他人这样做的原因。)

关于python - 如何像通常的学校舍入一样将 float 0.5 舍入到 1.0,同时仍将 0.45 舍入到 0.0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43851273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com