while循环 - python循环10次




在python中循环到5(或其他数字) (9)

是否有一个内置的函数可以像这样圆整:

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

** 5的下一个倍数**

考虑51需要转换为55

 code here

mark=51;
r=100-mark;
a=r%5;
new_mark=mark+a;

divround的修改版本:-)

def divround(value, step, barrage):
    result, rest = divmod(value, step)
    return result*step if rest < barrage else (result+1)*step

为了舍入到非整数值,如0.05:

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

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


删除'休息'将工作:

rounded = int(val) - int(val) % 5

如果该值是一个整数:

rounded = val - val % 5

作为一项功能:

def roundint(value, base=5):
    return int(value) - int(value) % int(base)

对不起,我想评论Alok Singhai的回答,但它不会让我因缺乏声誉= /

无论如何,我们可以推广一步,然后去:

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

这允许我们使用非整数基,例如.25或任何其他分数基。


您可以通过将int()传递给int()的数字加上0.5来“欺骗” int() ,而不是将其四舍五入。


我意识到我迟到了派对,但似乎没有提到这个解决方案:

>>> from __future__ import division   # This is only needed on Python 2
>>> 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

这只是一个缩放问题

>>> a=[10,11,12,13,14,15,16,17,18,19,20]
>>> for b in a:
...     int(round(b/5.0)*5.0)
... 
10
10
10
15
15
15
15
15
20
20
20

def round_to_next5(n):
    return n + (5 - n) % 5






rounding