python中的圆整数,不使用round()

时间:2013-12-26 18:31:26

标签: python rounding

我知道我可以使用round(<int>, -1)在python中舍入到10的最接近的倍数。有没有办法在不使用此内置函数的情况下执行此操作?

修改

感谢您的反馈! 使用divmod()的答案很有趣,因为我之前从未使用过divmod。万一有人想知道CodingBat,解决方案中使用了modulo的解决方案。在这里,万一有人感兴趣。

def round10(num):
  mod = num % 10
  num -= mod
  if mod >= 5: num += 10
  return num

4 个答案:

答案 0 :(得分:2)

除以10int,乘以10

实际上,您可以使用//运算符在没有任何内置函数的情况下执行此操作:

>>> def round(x):
...     return (x//10)*10
... 
>>> round(15.)
10.0
>>> round(25.)
20.0

当然,这总是四舍五入。如果要舍入余数大于5的值,可以使用divmod

def round(x):
    n, remainder = divmod(x, 10)
    if remainder >= 5:
        n += 1
    return n * 10

答案 1 :(得分:2)

这是最接近的,不总是向上或永远向下:

def xround(n):
    return (n + 5) // 10 * 10

答案 2 :(得分:0)

向下舍入到10的最接近的倍数:

int(n / 10) * 10

最接近10的倍数:

int((n + 10) / 10) * 10

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

(int(n / 10) + bool(n % 10 >= 5)) * 10

答案 3 :(得分:0)

我有一个将n舍入到d的最接近倍数的函数:

def cm(n,d,o="+"):
    p = d - (n % d)
    m = n % d
    nm = n - m
    np = n + p
    if p > m:
        return nm
    elif m > p:
        return np
    else:
        if o == "+":
            return np
        else:
            return nm

使用方法: 使用cm(数字,在特殊情况下接近多个想要的,首选方向)

示例:

cm(8,10) = 10
cm(6,4,"-") = 4 #special case (n % d == d - n % d)
cm(6,4,"+") = 8 #special case
cm(6,4) = 8