如何用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
相关产品推荐
相关产品推荐

