【问题标题】:C# Currency FormattingC# 货币格式
【发布时间】:2021-04-17 10:58:26
【问题描述】:

有没有办法使用自定义格式字符串以货币格式(在当前文化中)格式化数字?

例如:

1525.00 -> $1,525 (no trailing zeros)
1525.25 -> $1,525.25 (show decimals only when necessary)

我们尝试了不同的格式,但没有一个可以产生上述内容。

【问题讨论】:

标签: c# formatting currency


【解决方案1】:

据我所知,不,您不能使用“one”格式执行此操作,因为您不想显示第一个的小数部分,但您“想要”显示第二个小数部分。我认为两者都不会有“简单”的格式。

您可以检查Currency format specifier (C) 为;

var v = 1525.00;
$"{v:C0}".Dump();

返回$1,525

var v = 1525.25;
$"{v:C2}".Dump();

返回$1,525.25

请注意,string interpolation uses CurrentCulture 设置,在这种情况下,我假设您当前的文化在某种程度上基于 基于英语的InvariantCulture 用于生成 CurrencySymbolNumberGroupSeparator 和 @ 987654333@ 分别为$,.

【讨论】:

    【解决方案2】:

    这算不算?

    static string MyCustomCurrencyString(decimal d) => d % 1 == 0 ? $"{d:C0}" : $"{d:C2}";
    

    让我们测试一下:

    Console.WriteLine(ZerosAreBad(1525));
    Console.WriteLine(ZerosAreBad(1525.25m));
    

    有效!

    $1,525
    $1,525.25
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 2011-09-16
      相关资源
      最近更新 更多