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

如何使用CSVHelper将Decimal金额以货币格式写入CSV文件?

问题

我有一个代表金额的Decimal类型值,希望将其以货币格式写入CSV文件。当前使用的代码如下:

await using var writer = new StreamWriter(csvPath);
await using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    csv.Context.RegisterClassMap<MyClass>();

    await csv.WriteRecordsAsync(data);
};

在映射类中我做了如下配置:

Map(x => x.Amount).Name("amount")
                .TypeConverterOption.NumberStyles(NumberStyles.Currency);

但最终得到的结果仅是十进制数值“141000”,而非货币格式,请问如何在CSV文件中以货币格式显示该Decimal数值?

解决方案

你当前用的NumberStyles.Currency是用来解析货币格式输入的规则,不是格式化输出的配置,这就是生效失败的原因。要输出货币格式,需调整如下:

方法1:指定货币格式字符串

修改类映射配置,使用TypeConverterOption.Format传入标准货币格式符("C"为默认货币格式,"C2"表示强制保留两位小数):

Map(x => x.Amount).Name("amount")
                .TypeConverterOption.Format("C");

方法2:适配特定地区货币格式(可选)

如果需要输出对应地区的货币符号(如人民币¥、美元$),不要使用InvariantCulture,替换为目标文化信息。例如输出人民币格式:

await using (var csv = new CsvWriter(writer, new CultureInfo("zh-CN")))
{
    csv.Context.RegisterClassMap<MyClass>();
    await csv.WriteRecordsAsync(data);
};

配合映射中的Format("C")配置,最终会输出类似¥141,000.00的格式。

额外说明

  • 用InvariantCulture搭配"C"会输出通用货币格式,结果为¤141,000.00(¤是通用货币符号),适合不需要特定地区符号的场景。
  • 若需自定义格式(比如仅保留整数和货币符号),可使用自定义格式字符串,例如"¥#,##0"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:46:01