如何格式化签名货币

时间:2012-10-16 14:04:07

标签: c#

我有以下情况。小数值需要显示为货币,但包括相应的货币符号和符号,因此:

  1. -45.23显示为 - £45.23
  2. 45.23显示为+£45.23
  3. 货币符号必须来自System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol。我有这个,但我找不到交换标志和货币符号的方法:

    string s1 = string.Format(@"{1}{0:+#,##0.00;-#,##0.00}", 45.09M, 
        System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol);
    Console.WriteLine(s2);
    string s2 = string.Format(@"{1}{0:+#,##0.00;-#,##0.00}", -45.09M, 
        System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol);
    Console.WriteLine(s2);
    

    输出:

    £+45.09
    £-45.09
    

    我想:

    +£45.09
    -£45.09
    

    更新

    有人发布了关于NumberFormatInfo.CurrencyPositivePattern财产的另一个答案,这看起来很有希望,特别是因为但是微软似乎忽略了NumberFormatInfo.CurrencyNegativePattern财产包含各种负面陈述选项的可能性。但是,NumberFormatInfo.CurrencyPositivePattern不包含包含正号的选项!该死的。感谢无论是谁提到它,但删除了他们的评论。不过我学会了一个人。

2 个答案:

答案 0 :(得分:3)

正如我发布的那样,我意识到答案是分三步而不是两步:

string s1 = string.Format(@"{0:+;-}{1}{0:#,##0.00;#,##0.00}", 45.09M, System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol);
Console.WriteLine(s1);

string s2 = string.Format(@"{0:+;-}{1}{0:#,##0.00;#,##0.00}", -45.09M, System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol);
Console.WriteLine(s2);

输出:

+£45.09
-£45.09

答案 1 :(得分:1)

您的string.Format 明确地将+/-放在前面。

如果将操作分为两个步骤,则会变得更容易。首先注入你的当前符号,然后格式化你的号码。

string fmt = string.Format(@"{{0:+{0}#,##0.00;-{0}#,##0.00}}",  
    System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol);
string s1 = string.Format(fmt, 45.09M);
Console.WriteLine(s1); 
string s2 = string.Format(fmt, -45.09M);
Console.WriteLine(s2);