如何像通常的学校四舍五入一样将0.5向上舍入为1.0,同时仍将0.45舍入为0.0? - python

似乎默认的Python round(1 / 2)为0。

如何像通常的学校四舍五入一样将0.5向上舍入为1.0,同时仍将0.45舍入为0.0?

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

python大神给出的解决方案

实际上,目前认为不要盲目地将* .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(...)函数将返回整数,而不是浮点数。这不是主要问题,但是现在您知道了。

方法2

从我上面链接的文章看来,另一个选择是使用decimal模块模拟舍入行为的“旧”方式。我有点从那里复制和粘贴,但是在这里您可以:

import decimal

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

想要的是decimal.ROUND_HALF_UP舍入形式。这样,您不必有条件地使用ceil(...)函数。

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

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

Python-熊猫描述了抛出错误:无法散列的类型“ dict” - python

更新:我正在使用“ Socrata开源API”中的一些示例代码。我在代码中注意到以下注释:# First 2000 results, returned as JSON from API / converted to Python # list of dictionaries by sodapy. 我不熟悉JSON。我已经下载了一个数据集,并创建了一个包含大量…

子条件的python条件覆盖 - python

我试图找到一个python代码覆盖率工具,该工具可以衡量语句中是否包含子表达式:例如,我想看看下面的示例是否涵盖了condition1 / condition2 / condtion3?if condition1 or condition2 or condition3: x = true_value python大神给出的解决方案 对此的唯一合理答案是:当前…

USB设备发行 - python

我目前正在使用PyUSB。由于我不熟悉USB,所以我不知道如何执行以下操作。我已经从Python PyUSB成功连接到我的USB设备硬件。在代码中,我需要重置USB设备硬件。通过向硬件发送命令来完成。现在,在硬件重置后,我想从Python PyUSB释放当前的USB设备。然后,我想在重置后将其重新连接到USB设备硬件。请让我知道,如何释放USB设备连接和接口…