使用Babel格式化负数值货币时出现格式错误
解决Babel format_currency负数瑞士法郎格式问题
你遇到的问题根源是没有在格式字符串中明确指定负数的显示规则,导致Babel采用默认的负数处理逻辑,结果不符合预期。要得到CHF -100.50的格式,只需在自定义格式字符串里添加分号分隔的负数模式即可。
修正后的代码示例
from babel.numbers import format_currency value = -100.50 # 自定义格式串,分号前是正数格式,分号后是负数格式 print(format_currency(value, 'CHF', '¤¤ #,##0.00;¤¤ -#,##0.00', locale='de_CH'))
运行这段代码会直接输出你想要的CHF -100.50。
为什么之前的写法不对?
- 第一个调用用了
de_CHlocale的默认格式,该locale对CHF的默认负数格式就是把负号紧跟在货币符号后,所以输出CHF-100.50 - 后面两个自定义格式只定义了正数模式,没有指定负数模式,Babel会自动使用默认的负数规则(把负号放在最前面),所以输出
-CHF 100.50 - 通过分号分隔正数/负数模式,就能完全掌控负数的显示样式,让货币符号在前,负号紧跟其后再带数字
内容的提问来源于stack exchange,提问作者user2828408
相关产品推荐
相关产品推荐

