String.Format(“ {0:C2}”, - 1234)(货币格式)将负数视为正数
-
05-07-2019 - |
题
我使用 String.Format(" {0:C2}", - 1234)
来格式化数字。
它总是将金额格式化为正数,而我希望它变为$ - 1234
解决方案 3
我想我会简单地使用:
FormatCurrency(-1234.56, 2, UseParensForNegativeNumbers:=TriState.False)
(在Microsoft.VisualBasic.Strings模块中)
或者用较短的词语(这就是我实际要使用的):
FormatCurrency(-1234.56, 2, 0, 0)
或者我将自己制作一个自定义格式货币函数,它使用VB函数传递我的自定义参数。
有关详细信息,请查看 FormatCurrency Function( msdn。
中的Visual Basic)其他提示
我是否正确地说它将它放在括号中,即它将其格式化为($ 1,234.00)
?如果是这样,我认为这是美国的预期行为。
但是,您可以创建自己的 NumberFormatInfo
,它不会以这种方式运行。获取现有的 NumberFormatInfo
,其中“大部分是正确的”,调用 Clone()
来制作一个可变副本,然后设置 CurrencyNegativePattern
(我认为你想要值2)。
例如:
using System;
using System.Globalization;
class Test
{
static void Main()
{
var usCulture = CultureInfo.CreateSpecificCulture("en-US");
var clonedNumbers = (NumberFormatInfo) usCulture.NumberFormat.Clone();
clonedNumbers.CurrencyNegativePattern = 2;
string formatted = string.Format(clonedNumbers, "{0:C2}", -1234);
Console.WriteLine(formatted);
}
}
这打印$ -1,234.00。如果你真的想要$ -1234,你需要设置 CurrencyGroupSizes
属性为 new int [] {0}
并使用" {0:C0}"
代替" {0:C2}"
作为格式字符串。
编辑:这是一个你可以使用的辅助方法,基本上做同样的事情:
private static readonly NumberFormatInfo CurrencyFormat = CreateCurrencyFormat();
private static NumberFormatInfo CreateCurrencyFormat()
{
var usCulture = CultureInfo.CreateSpecificCulture("en-US");
var clonedNumbers = (NumberFormatInfo) usCulture.NumberFormat.Clone();
clonedNumbers.CurrencyNegativePattern = 2;
return clonedNumbers;
}
public static string FormatCurrency(decimal value)
{
return value.ToString("C2", CurrencyFormat);
}
另一个简单的选择是手动指定格式字符串。
String.Format("{0:$#,##0.00}", -1234)
或者,如果货币符号需要是参数,则可以执行此操作
String.Format("{0:" + symbol + "#,##0.00}", -1234)
不隶属于 StackOverflow