You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现数字以逗号为百位分隔符的格式化

问题解答:Python实现百位数字分隔

核心结论

Python内置的format函数(包括"{:,}"语法糖)仅支持千位分隔,没有直接参数可以改为百位分隔,需要通过自定义实现或字符串/正则技巧来完成需求。

两种自定义实现代码

方法1:字符串反转分割法

通过将数字转为字符串后反转,按指定长度(这里是2位)分割,再反转回来拼接,完美匹配需求格式:

num = 987756
sep = 2  # 百位分隔对应sep=2
num_str = str(num)
reversed_str = num_str[::-1]
parts = []

for i in range(0, len(reversed_str), sep):
    # 截取反转后的片段,再反转回原顺序
    part = reversed_str[i:i+sep][::-1]
    parts.insert(0, part)

print(','.join(parts))  # 输出: 98,77,56

# 测试另一个案例
num = 20787
num_str = str(num)
reversed_str = num_str[::-1]
parts = []
for i in range(0, len(reversed_str), sep):
    part = reversed_str[i:i+sep][::-1]
    parts.insert(0, part)
print(','.join(parts))  # 输出: 2,07,87

注:原示例代码中num=85300的输出标注错误,正确运行后输出应为8,53,00。

方法2:数值取模补零法

通过对数字取模和整除操作拆分,再格式化补零保证每部分长度一致:

num = 987756
sep = 2
d_sep = 10 ** sep
parts = []

while num > 0:
    # 取最后sep位,用格式化补零确保每部分都是2位
    part = f"{num % d_sep:0{sep}d}"
    parts.insert(0, part)
    num = num // d_sep

# 处理数字为0的特殊情况
if not parts:
    parts.append("0")

print(','.join(parts))  # 输出: 98,77,56

# 测试另一个案例
num = 20787
parts = []
while num > 0:
    part = f"{num % d_sep:0{sep}d}"
    parts.insert(0, part)
    num = num // d_sep
print(','.join(parts))  # 输出: 2,07,87

原示例代码未处理前导零问题,这里通过f"{x:0{sep}d}"格式化补零,确保短片段也符合2位格式。

类似"{:,}"的简便实现

可以用正则表达式实现一行式简洁处理,用法和内置千位分隔一样便捷:

import re

def format_hundreds(num):
    num_str = str(num)
    # 正则逻辑:从后往前每2位插入逗号,开头不足2位保留原样
    return re.sub(r'(?<=.)(?=(..)+$)', ',', num_str)

# 测试案例
print(format_hundreds(987756))  # 输出: 98,77,56
print(format_hundreds(20787))   # 输出: 2,07,87
print(format_hundreds(85300))   # 输出: 8,53,00

内容的提问来源于stack exchange,提问作者Unbreakable Host

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:46:17