1

我有以下情况。十进制值需要显示为货币,但包括适当的货币符号和符号,因此:

  1. -45.23 显示为 -£45.23
  2. 45.23 显示为 +£45.23

货币符号必须来自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不包括包含正号的选项!该死。感谢提到它的人,但删除了他们的评论。尽管如此,我还是学到了一个人。

4

2 回答 2

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
于 2012-10-16T14:07:07.420 回答
1

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

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

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); 
于 2012-10-16T14:25:34.390 回答