为什么 String.Format 将减号转换为括号
Why does String.Format converts minus to parenthesis
我正在使用 String.Format
将 $
符号添加到值中。
var result = string.Format("{0:C}", Convert.ToDecimal(amount));
当 amount
为负时,它会将减号转换为括号 - 如下所示
-11.00 --> (.00)
我需要这个
-11.00 --> -.00
我该如何解决这个问题?
抱歉这么说,但对于 C 文字,输出 ($11.00) 是正确的。是一种典型的记负数记账格式。您可以在 Windows 设置中更改此设置,但此更改对系统来说是全局的,可能这不是您想要的。
简单的解决方案是使用:
var result = string.Format("${0:0.00}", Convert.ToDecimal(amount));
但是 USD 符号是硬编码的(顺便说一下,这是比在减号后写 USD 符号更“正确”的变体,如上一行代码所示)。如果你想让它灵活又自定义,你可以从系统文化设置中获取货币信息和小数点分隔符,直到它符合你的要求。
括号是显示负货币的首选会计格式,至少在美国是这样。参见 this UX.SE post。
如果您不想遵循该约定,您可以创建自己的 NumberFormatInfo
:
var format = CultureInfo.CreateSpecificCulture("en-US").NumberFormat;
// "1" means "-$n"
format.CurrencyNegativePattern = 1;
string.Format(format, "{0:C}", -1m) // "-.00"
请参阅 this 以获取可放入 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 ₿)
我正在使用 String.Format
将 $
符号添加到值中。
var result = string.Format("{0:C}", Convert.ToDecimal(amount));
当 amount
为负时,它会将减号转换为括号 - 如下所示
-11.00 --> (.00)
我需要这个
-11.00 --> -.00
我该如何解决这个问题?
抱歉这么说,但对于 C 文字,输出 ($11.00) 是正确的。是一种典型的记负数记账格式。您可以在 Windows 设置中更改此设置,但此更改对系统来说是全局的,可能这不是您想要的。
简单的解决方案是使用:
var result = string.Format("${0:0.00}", Convert.ToDecimal(amount));
但是 USD 符号是硬编码的(顺便说一下,这是比在减号后写 USD 符号更“正确”的变体,如上一行代码所示)。如果你想让它灵活又自定义,你可以从系统文化设置中获取货币信息和小数点分隔符,直到它符合你的要求。
括号是显示负货币的首选会计格式,至少在美国是这样。参见 this UX.SE post。
如果您不想遵循该约定,您可以创建自己的 NumberFormatInfo
:
var format = CultureInfo.CreateSpecificCulture("en-US").NumberFormat;
// "1" means "-$n"
format.CurrencyNegativePattern = 1;
string.Format(format, "{0:C}", -1m) // "-.00"
请参阅 this 以获取可放入 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 ₿)