Питон - Раунд до ближайшей 9 (ближайшая единица, десять, сто) - PullRequest
0 голосов
/ 03 апреля 2019

Можете ли вы представить себе функцию в Python для округления любого числа до ближайшего 9?

Исключение составляет округление до ближайшей единицы: десять, сто, тысячелетия и т. Д.

76 --> 69 
242 --> 239 
8434 --> 8399 
34857 --> 33999
987482 --> 986999

1 Ответ

1 голос
/ 03 апреля 2019

Используйте следующую функцию:

import math

def round_to_nearest_9(number):
    number_of_fixed_digits = 1
    factor = max(10, math.pow(10, math.floor(math.log10(number))
                     - number_of_fixed_digits))
    return (number // factor) * factor - 1

Примечание 1: если вы измените - 1 в конце на -0.01, вы даже получите округленное значение, включая 99 центов Примечание 2: Ваше желаемое поведение опасно для небольших количеств, так как 19 -> 9

Edit: @MarkDickinson предложил следующую модификацию, касающуюся нежелательного поведения, указанного в примечании 2:

def round_to_nearest_9(number):
    number_of_fixed_digits = 1
    factor = max(10, math.pow(10, math.floor(math.log10(number))
                     - number_of_fixed_digits))
    return (number - 1 // factor) * factor - 1
...