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

使用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。这个格式存在两个问题:

  1. 末尾的0强制要求显示整数部分,导致小于1的数值会被截断为€0;
  2. 格式中千位分隔符(.)和小数分隔符(,)的写法符合欧洲地区规范,但小数部分的定义逻辑错误,无法正确识别小额数值的小数位。

针对欧元货币的常规显示需求,推荐两种修正格式:

  • 保留固定两位小数(符合货币标准展示):使用€#.###,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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:05:56