Округлить целое число до следующих 99 в зависимости от количества цифр - PullRequest
0 голосов
/ 05 мая 2020

Как мне использовать math.ceil () для округления числа до максимума его основания. Например, если число находится в диапазоне

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

и т. Д. Я сделал это, посчитав количество цифр, но я ищу pythoni c way

Ответы [ 3 ]

1 голос
/ 05 мая 2020

Вы также можете использовать следующее:

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
1 голос
/ 05 мая 2020

Вот один из способов сделать это, используя потолок вместе с логарифмами:

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

Лог c здесь - это сначала вычислить потолок степень 10, которая потребовалась бы для генерации коэффициента десятков, который является верхней границей ввода. Затем мы просто берем верхнюю границу десятков и вычитаем из нее единицу, чтобы получить ожидаемый результат.

0 голосов
/ 05 мая 2020

Я бы, наверное, использовал это:

def round9(x):
    r = 10
    while x >= 10: 
        r *= 10
        x //= 10
    return r-1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...