.net CSVHelper将货币值插入文件

wbrvyc0a  于 2022-12-01  发布在  .NET
关注(0)|答案(1)|浏览(118)

我有一个小数值,表示金额。我想插入到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课上

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

因此,我只有十进制值'141000'不像货币

我可以在csv文件中显示十进制像货币吗?

zwghvu4y

zwghvu4y1#

我认为TypeConverterOption.NumberStyles(NumberStyles.Currency)只能将字符串转换为数字。如果你想反其道而行之,你需要使用TypeConverterOption.Format。我还发现你不能使用CultureInfo.InvariantCulture。你要么需要使用CultureInfo.CurrentCulture,要么需要使用货币符号的特定文化。

void Main()
{
    var records = new List<Foo>
    {
        new Foo { Id = 1, Amount = 141000 },
    };

    //using (var writer = new StreamWriter("path\\to\\file.csv"))
    using (var csv = new CsvWriter(Console.Out, CultureInfo.CurrentCulture))
    {
        csv.Context.RegisterClassMap<FooMap>();
        csv.WriteRecords(records);
    }
}

public class FooMap : ClassMap<Foo>
{
    public FooMap()
    {
        Map(m => m.Id);
        Map(m => m.Amount).Name("amount").TypeConverterOption.Format("C");
    }
}

public class Foo
{
    public int Id { get; set; }
    public decimal Amount { get; set; }
}

相关问题