我正在使用String.Format
将$
符号添加到值中。
var result = string.Format("{0:C}", Convert.ToDecimal(amount));
当amount
为负数时,它会将减号转换为括号,就像下面一样
-11.00 --> ($11.00)
我需要这个
-11.00 --> -$11.00
如何解决此问题
括号是显示负货币的首选会计格式,至少在美国是这样。请参阅此UX.SE帖子。
如果你不想遵循这个惯例,你可以创建自己的NumberFormatInfo
:
var format = CultureInfo.CreateSpecificCulture("en-US").NumberFormat;
// "1" means "-$n"
format.CurrencyNegativePattern = 1;
string.Format(format, "{0:C}", -1m) // "-$1.00"
有关可以放入CurrencyNegativePattern
中的值的列表,请参见此。
如果您不想使用标准区域性,那么实际上您对数字的输出方式有很大的控制权。事实上,如果你愿意,你可以自己制作货币符号。
以下是如何自定义decimal.ToString
输出:
var money = -4.21345m;
var ni = new System.Globalization.NumberFormatInfo()
{
CurrencySymbol = "₿",
CurrencyDecimalDigits = 5,
};
for (var i = 0; i < 16; i++)
{
ni.CurrencyNegativePattern = i;
Console.WriteLine(money.ToString("C", ni));
}
这给了我:
(₿4.21345)
-₿4.21345
₿-4.21345
₿4.21345-
(4.21345₿)
-4.21345₿
4.21345-₿
4.21345₿-
-4.21345 ₿
-₿ 4.21345
4.21345 ₿-
₿ 4.21345-
₿ -4.21345
4.21345- ₿
(₿ 4.21345)
(4.21345 ₿)
很抱歉这么说,但对于C文字,输出(11.00美元(是正确的。这是一种典型的书写负数的记账格式。您可以在Windows设置中对此进行更改,但更改将是系统的全局更改,这可能不是您想要的。
简单的解决方案是使用:
var result = string.Format("${0:0.00}", Convert.ToDecimal(amount));
但美元符号是硬编码的(顺便说一句,这比在最后一行代码中所示的减号后面写美元符号更"正确"(。如果您想使其灵活且自定义,您可以从系统区域性设置中获取货币信息和小数分隔符,直到其符合您的要求。