是否有一个内置函数可以像下面这样舍入?

10 -> 10
12 -> 10
13 -> 15
14 -> 15
16 -> 15
18 -> 20

当前回答

我不知道Python中的标准函数,但这对我来说是可行的:

Python 3

def myround(x, base=5):
    return base * round(x/base)

很容易理解为什么上面的方法是有效的。你要确保你的数字除以5是一个整数,四舍五入正确。所以,我们首先做的就是(round(x/5))然后因为我们除以5,所以我们也乘以5。

我通过给它一个基本参数使函数更通用,默认值为5。

Python 2

在Python 2中,需要使用float(x)来确保/执行浮点除法,并且需要最终转换为int,因为在Python 2中round()返回的是浮点值。

def myround(x, base=5):
    return int(base * round(float(x)/base))

其他回答

我想还没有人写过这个,但你可以这样做:

round(12, -1) --> 10
round(18, -1) --> 20

舍入到非整数值,例如0.05:

def myround(x, prec=2, base=.05):
  return round(base * round(float(x)/base),prec)

我发现这很有用,因为我只需要在代码中进行搜索和替换,就可以将“round(”更改为“myround(”,而不必更改参数值。

我不知道Python中的标准函数,但这对我来说是可行的:

Python 3

def myround(x, base=5):
    return base * round(x/base)

很容易理解为什么上面的方法是有效的。你要确保你的数字除以5是一个整数,四舍五入正确。所以,我们首先做的就是(round(x/5))然后因为我们除以5,所以我们也乘以5。

我通过给它一个基本参数使函数更通用,默认值为5。

Python 2

在Python 2中,需要使用float(x)来确保/执行浮点除法,并且需要最终转换为int,因为在Python 2中round()返回的是浮点值。

def myround(x, base=5):
    return int(base * round(float(x)/base))

Use:

>>> def round_to_nearest(n, m):
        r = n % m
        return n + m - r if r + r >= m else n - r

它不使用乘法,也不会从/转换为浮点数。

四舍五入到最接近10的倍数:

>>> for n in range(-21, 30, 3): print('{:3d}  =>  {:3d}'.format(n, round_to_nearest(n, 10)))
-21  =>  -20
-18  =>  -20
-15  =>  -10
-12  =>  -10
 -9  =>  -10
 -6  =>  -10
 -3  =>    0
  0  =>    0
  3  =>    0
  6  =>   10
  9  =>   10
 12  =>   10
 15  =>   20
 18  =>   20
 21  =>   20
 24  =>   20
 27  =>   30

如你所见,它对负数和正数都适用。平局(例如-15和15)总是向上四舍五入。

一个类似的例子,四舍五入到5的最接近倍数,证明它也表现为不同的“基数”:

>>> for n in range(-21, 30, 3): print('{:3d}  =>  {:3d}'.format(n, round_to_nearest(n, 5)))
-21  =>  -20
-18  =>  -20
-15  =>  -15
-12  =>  -10
 -9  =>  -10
 -6  =>   -5
 -3  =>   -5
  0  =>    0
  3  =>    5
  6  =>    5
  9  =>   10
 12  =>   10
 15  =>   15
 18  =>   20
 21  =>   20
 24  =>   25
 27  =>   25

的值加上0.5,可以“欺骗”int()使其舍入而不是舍入 传递给int()的数字。