如何将数字四舍五入为 10、100、1000、10000、100000
How to round number to 10, 100, 1000, 10000, 100000
我想要一个函数,如果数字小于 10,则将其四舍五入为 10,如果数字在 10 到 1000 之间,则四舍五入为 100,依此类推。
这将有助于解决数字串联问题,因此我不必将数字转换为 str 并返回。
def roundup(n):
if n < 0: return 0
if n < 10: return 10
if n < 100: return 100
if n < 1000: return 1000
if n < 10000: return 10000
我想知道是否有一种自然的方法可以做到这一点,而不仅仅是将“if”堆叠在一起
与 python 具体问题相比,这更像是一道数学题,但您实际上是在计算一个数字的对数。
def round_base_10(x):
if x < 0:
return 0
elif x == 0:
return 10
return 10**math.ceil(math.log10(x))
另一个选项(没有math
):
def roundup(n):
return 10**(len(str(n))-1)
您可以使用天真的方法:
def roundup(n):
top = 1
while True:
if n <= top:
return top
top *= 10
在 Python2 中需要 top = 1L
,但在 Python3 中整数默认为长整数。
def roundup(n):
if n < 0:
return 0
size = len(str(n))
return int('1'.ljust(size+1, '0'))
我想要一个函数,如果数字小于 10,则将其四舍五入为 10,如果数字在 10 到 1000 之间,则四舍五入为 100,依此类推。
这将有助于解决数字串联问题,因此我不必将数字转换为 str 并返回。
def roundup(n):
if n < 0: return 0
if n < 10: return 10
if n < 100: return 100
if n < 1000: return 1000
if n < 10000: return 10000
我想知道是否有一种自然的方法可以做到这一点,而不仅仅是将“if”堆叠在一起
与 python 具体问题相比,这更像是一道数学题,但您实际上是在计算一个数字的对数。
def round_base_10(x):
if x < 0:
return 0
elif x == 0:
return 10
return 10**math.ceil(math.log10(x))
另一个选项(没有math
):
def roundup(n):
return 10**(len(str(n))-1)
您可以使用天真的方法:
def roundup(n):
top = 1
while True:
if n <= top:
return top
top *= 10
在 Python2 中需要 top = 1L
,但在 Python3 中整数默认为长整数。
def roundup(n):
if n < 0:
return 0
size = len(str(n))
return int('1'.ljust(size+1, '0'))