-1

我想要一个函数,如果它小于 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's 堆叠在一起

4

4 回答 4

6

这更像是一个数学问题,而不是一个特定于 python 的问题,但你实际上是在计算一个数字的对数。

def round_base_10(x):
    if x < 0:
        return 0
    elif x == 0:
        return 10
    return 10**math.ceil(math.log10(x))
于 2019-01-09T16:37:41.643 回答
0

另一种选择(不带math):

def roundup(n):
    return 10**(len(str(n))-1)
于 2019-01-09T16:41:11.960 回答
0

您可以使用天真的方法:

def roundup(n):
    top = 1
    while True:
        if n <= top:
            return top
        top *= 10

你需要top = 1L在 Python2 中,但在 Python3 中默认整数很长。

于 2019-01-09T16:41:17.023 回答
0
def roundup(n):
    if n < 0:
        return 0
    size = len(str(n))
    return int('1'.ljust(size+1, '0'))
于 2019-01-09T16:41:56.933 回答