我知道我可以使用round(<int>, -1)
在python中舍入到10的最接近的倍数。有没有办法在不使用此内置函数的情况下执行此操作?
修改
感谢您的反馈! 使用divmod()的答案很有趣,因为我之前从未使用过divmod。万一有人想知道CodingBat,解决方案中使用了modulo的解决方案。在这里,万一有人感兴趣。
def round10(num):
mod = num % 10
num -= mod
if mod >= 5: num += 10
return num
答案 0 :(得分:2)
除以10
,int
,乘以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