Python - 四舍五入到最接近的 9(最接近的单位、十、百)

Python - Round to nearest 9 (nearest unit, ten, hundred)

你能想出 Python 中的函数来将任何数字四舍五入到最接近的 9 吗?

例外情况是四舍五入到最接近的单位,十、百、千等

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

使用以下函数:

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

编辑: @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