Используйте следующую функцию:
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