zai / app /utils /format.py
bg5's picture
Upload 85 files
e0b68d2 verified
Raw History Blame Contribute Delete
744 Bytes
"""
格式化工具库
"""
from typing import Any
def format_compact_number(value: Any) -> str:
"""格式化大数字,采用 K (千) / M (百万) / B (十亿) 单位展示。"""
try:
number = float(value or 0)
except (TypeError, ValueError):
return "0"
abs_num = abs(number)
if abs_num >= 1_000_000_000:
formatted = f"{number / 1_000_000_000:.1f}B"
elif abs_num >= 1_000_000:
formatted = f"{number / 1_000_000:.1f}M"
elif abs_num >= 1_000:
formatted = f"{number / 1_000:.1f}K"
else:
return str(int(number)) if number.is_integer() else f"{number:.1f}"
return formatted.replace(".0B", "B").replace(".0M", "M").replace(".0K", "K")