采用的递归方法,相比于if判断,代码逻辑更加清晰,也具备更好的扩展性,以及需要修改成,个十百千万十万百万代码调整起来也是很方便。
中文
def humanize_float_cn(num: float, num_digits: int = 2):
"""
num:数字
num_digits:小数点保留位数
"""
units = ['', '万', '亿', '兆(10^12)', '京(10^16)', '垓(10^20)', '秭(10^24)']
def strofsize(num, level):
if level >= len(units) - 1:
return num, level
elif abs(num) >= 10000:
num /= 10000
level += 1
return strofsize(num, level)
else:
return num, level
num, level = strofsize(num, 0)
if level > len(units):
level -= 1
return f'{round(num, num_digits)}{units[level]}'
print(humanize_float_cn(123))
print(humanize_float_cn(-1024))
print(humanize_float_cn(44309483))
print(humanize_float_cn(-234923023))
print(humanize_float_cn(44801993094304))
print(humanize_float_cn(-47394813439493843))
123
-1024
4430.95万
-2.35亿
44.8兆(10^12)
-4.74京(10^16)
英语
def humanize_float_en(num: float, num_digits: int = 2):
"""
num:数字
num_digits:小数点保留位数
"""
units = ['', 'K', 'M', 'B', 'T']
def strofsize(num, level):
if level >= len(units) - 1:
return num, level
elif abs(num) >= 1000:
num /= 1000
level += 1
return strofsize(num, level)
else:
return num, level
num, level = strofsize(num, 0)
if level > len(units):
level -= 1
return f'{round(num, num_digits)}{units[level]}'
print(humanize_float_en(123))
print(humanize_float_en(-1024))
print(humanize_float_en(44309483))
print(humanize_float_en(-234923023, 5))
print(humanize_float_en(44801993094304, 0))
print(humanize_float_en(-47394813439493843))
123
-1.02K
44.31M
-234.92302M
45.0T
-47394.81T