如何使用CsvHelper TypeConverter格式化数字为两位小数?
CsvHelper导出CSV保留数字两位小数的解决方法
直接通过TypeConverterOption.Format()设置输出格式即可,这是控制数字导出格式的正确方式:
Map(m => m.DonationAmount).TypeConverterOption.Format("0.00");
为什么之前的方法无效?
NumberStyles.Currency是用于读取CSV时解析货币格式数字的配置,不影响输出格式,所以对你的导出需求没用。- 直接在
Map()里写m.DonationAmount.ToString("0.00")会报错,因为CsvHelper的Map方法需要绑定到实体的属性成员,不能直接传入方法调用的结果。
完整示例
假设你的实体类是Donation,对应的映射类可以这么写:
public class DonationMap : ClassMap<Donation> { public DonationMap() { // 强制保留两位小数输出 Map(m => m.DonationAmount).TypeConverterOption.Format("0.00"); // 其他属性映射 Map(m => m.DonorName); Map(m => m.DonationDate); } }
导出时注册这个映射类即可:
var donationsList = GetDonations(); // 你的数据集合 using (var writer = new StreamWriter("output.csv")) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csv.Context.RegisterClassMap<DonationMap>(); csv.WriteRecords(donationsList); }
如果需要输出带货币符号的格式,可以把格式字符串换成"C2",比如:
Map(m => m.DonationAmount).TypeConverterOption.Format("C2");
内容的提问来源于stack exchange,提问作者bph
相关产品推荐
相关产品推荐

