使用xlsxwriter格式化欧元货币时的小数位显示异常问题
Excel欧元货币格式小额数值显示异常问题
问题说明
使用自定义函数style_excel_currency为Excel列设置欧元货币格式时,百位、千位数值显示正常,但0.06、0.66这类小额数值无法正确格式化。
原代码示例
def style_excel_currency(writer): wb = writer.book ws = writer.sheets['Fatture'] money_fmt = wb.add_format({'num_format': '€#.###,##0'}) ws.set_column('A:A', 10, money_fmt) if __name__=='__main__': filename='attempt.xlsx' with pd.ExcelWriter(filename) as writer: df.to_excel(writer, sheet_name='Fatture', index=False, engine='openpyxl') style_excel_currency(writer)
测试数据集
df = pd.DataFrame(data={'col1':[100,101,200,0.06,0.66]})
问题原因及解决方案
问题出在你设置的num_format格式字符串上:€#.###,##0。这个格式存在两个问题:
- 末尾的
0强制要求显示整数部分,导致小于1的数值会被截断为€0; - 格式中千位分隔符(
.)和小数分隔符(,)的写法符合欧洲地区规范,但小数部分的定义逻辑错误,无法正确识别小额数值的小数位。
针对欧元货币的常规显示需求,推荐两种修正格式:
- 保留固定两位小数(符合货币标准展示):使用
€#.###,00,所有数值都会显示两位小数,0.06会显示为€0,06,100会显示为€100,00; - 按需显示小数位:使用
€#.###,##,小额数值会保留有效小数位,大额数值正常显示千位分隔符,0.66会显示为€0,66,200会显示为€200。
修正后的函数代码(以固定两位小数为例):
def style_excel_currency(writer): wb = writer.book ws = writer.sheets['Fatture'] # 适配欧洲地区的欧元货币格式,保留两位小数 money_fmt = wb.add_format({'num_format': '€#.###,00'}) ws.set_column('A:A', 10, money_fmt)
内容的提问来源于stack exchange,提问作者Marco Fumagalli
相关产品推荐
相关产品推荐

