Python不按预期工作的一些值



在Python 3中,我试图四舍五入值4800.5,所以我希望它是4801但是它给了我4800. 我不知道为什么会这样。如有任何帮助,不胜感激。

这是故意的

如果你看看round函数文档(https://docs.python.org/3/library/functions.html)你会发现:

对于支持round()的内置类型,值被舍入为10的负n次幂最接近的倍数;如果两个倍数同样接近,四舍五入是向偶数选择(因此,例如,round(0.5)和round(-0.5)都是0,并且整数(1.5)是2)。

简单地说,0.5是一个特殊情况,它总是向偶数四舍五入。

但是还有更有趣的事情。请看那个例子:

对于浮点数round()的行为可能令人惊讶例如,四舍五入(2.675,2)给出2.67,而不是预期的2.68。这不是一个错误:这是由于大多数小数分数不能精确地表示为浮点数

您可能想要做的是使用Decimal来实现更传统的舍入逻辑:https://docs.python.org/3/library/decimal.html

例如:

>>> Decimal('7.325').quantize(Decimal('.01'), rounding=ROUND_DOWN)
Decimal('7.32')
>>> Decimal('7.325').quantize(Decimal('.01'), rounding=ROUND_UP)
Decimal('7.33')

有很多种四舍五入的方法。round()根据特定的舍入策略进行行为,该策略在给定情况下可能是您需要的,也可能不是(请参阅问题的第一条注释)。

如果你想圆上你的电话号码,你可以试试这个:

import math
n = 4800.5
print(math.ceil(n))

你可以这样做:

from decimal import Decimal, ROUND_HALF_UP
def round_half_up(decimal_number, places=0):
if places == 0:
exp = Decimal('1')
else:
exp_str = '0' * places
exp_str = exp_str[:-1] + '1'
exp = Decimal('.{}'.format(exp_str))
return Decimal(decimal_number).quantize(exp, rounding=ROUND_HALF_UP)

print(round_half_up(4800.5)) -> 4801
print(round_half_up(4800.555, 2)) -> 4800.56

Round()函数将四舍五入到下一个值,如果小数为>.5到0.5时,它将四舍五入到整数部分。

最新更新