根据位数将整数四舍五入到下一个 99

Round up integer to the next 99 depending on the number of digits

如何使用 math.ceil() 将数字四舍五入到其基数的最大值。例如,如果数字介于

0 - 9 -> 9
10 - 99 -> 99
100 - 999 -> 999
1000 - 9999 -> 9999

等等。我是通过计算位数来完成的,但我正在寻找一种 pythonic 方式

这是使用上限和对数来执行此操作的一种方法:

def round_by_tens(inp):
    z = math.ceil(math.log10(inp+1))
    q = (10 ** z) - 1
    return q

nums = [5, 50, 500, 5000]
for num in nums:
    print(round_by_tens(num))

这会打印:

9.0
99.0
999.0
9999.0

这里的逻辑是首先计算 10 的上限幂,这将需要生成作为输入上限的十因子。然后,我们简单地取十位上限,并从中减去一个以生成您期望的输出。

您还可以使用以下内容:

def repeat_to_length(string_to_expand, length):
    return int(string_to_expand * length)


num = 0
print(repeat_to_length("9", len(str(num))))
# 9
num = 45
print(repeat_to_length("9", len(str(num))))
# 99
num = 123
print(repeat_to_length("9", len(str(num))))
# 999

我可能会用这个:

def round9(x):
    r = 10
    while x >= 10: 
        r *= 10
        x //= 10
    return r-1