根据位数将整数四舍五入到下一个 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
如何使用 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