12

根据http://msdn.microsoft.com/en-us/library/6t7dwaa5.aspx,如果我想将数字显示为货币,我可以调用 .ToString() 并传递一个参数,在本例中为“C "

但是,根据下面来自 MSDN 站点的详细信息,它会自动删除减号 (-) 字符,这意味着我的值现在是正数。

int value = -16325;   
// Display value using default ToString method.
Console.WriteLine(value.ToString());            // Displays -16325 
// Display value using some standard format specifiers.
Console.WriteLine(value.ToString("G"));         // Displays -16325
Console.WriteLine(value.ToString("C"));         // Displays ($16,325.00)
Console.WriteLine(value.ToString("D"));         // Displays -16325
Console.WriteLine(value.ToString("F"));         // Displays -16325.00
Console.WriteLine(value.ToString("N"));         // Displays -16,325.00
Console.WriteLine(value.ToString("X"));         // Displays FFFFC03B 

那么,如何使用减号保留它,我是否必须使用 Contains("-") 方法,如果它是真的添加 - 回来。

类似这段代码的东西(如果编码不正确,请道歉,但你明白了)。

string x = (value.ToString().Contains("-") : "-" + value.ToString("C") ?  + value.ToString("C"));
4

7 回答 7

19

这取决于您的CurrentCulture.NumberFormat.CurrencyNegativePattern. 可能的值是 0 - 15:

0 : ($12,345.00)
1 : -$12,345.00
2 : $-12,345.00
3 : $12,345.00-
4 : (12,345.00$)
5 : -12,345.00$
6 : 12,345.00-$
7 : 12,345.00$-
8 : -12,345.00 $
9 : -$ 12,345.00
10 : 12,345.00 $-
11 : $ 12,345.00-
12 : $ -12,345.00
13 : 12,345.00- $
14 : ($ 12,345.00)
15 : (12,345.00 $)

所以看起来你想设置它来1获得你想要的输出,比如:

int value = -12345;

var numberFormat = (NumberFormatInfo)CultureInfo.CurrentCulture.NumberFormat.Clone();
numberFormat.CurrencyNegativePattern = 1;

string numberAsCurrency = value.ToString("C", numberFormat)

但是,根据您关于它是远程服务器的评论并且您总是希望以特定方式进行格式化,最好将整个线程的文化设置为受控值,这将影响ToString()该线程上的所有后续调用:

int value = -12345;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyNegativePattern = 1;
string numberAsCurrency = value.ToString("C");
于 2013-01-03T11:13:07.203 回答
8

NumberFormatInfo您可以从当前语言环境创建自定义。然后你可以指定它的CurrencyNegativePattern,例如:

int value = -16325;
var culture = CultureInfo.CurrentCulture;
var mutableNfi = (NumberFormatInfo)culture.NumberFormat.Clone();
mutableNfi.CurrencyNegativePattern = 1;
Console.WriteLine(value.ToString("C", mutableNfi)); // Displays (-$16,325.00)
于 2013-01-03T11:08:55.467 回答
4

你可能想试试这个

        Console.WriteLine((-1234).ToString("c"));
        CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
        CultureInfo newCulture = new CultureInfo(currentCulture.IetfLanguageTag);
        newCulture.NumberFormat.CurrencyNegativePattern = 1;
        Thread.CurrentThread.CurrentCulture = newCulture;
        Console.WriteLine((-1234).ToString("c"));

MSDN:NumberFormatInfo.CurrencyNegativePattern 属性 以获取详细信息...

于 2013-01-03T11:08:31.583 回答
3

这取决于机器的本地化设置。许多语言环境中的负货币表示为( amount )所以 .net 在这里使用它。我不确定如何覆盖它。但这就是这里发生的事情。

于 2013-01-03T11:06:11.810 回答
3

这取决于文化。它使用NumberFormatInfo.CurrencyNegativePattern- 在美国似乎使用括号来表示负数。(正数没有括号。)

所以你可以克隆你的 current CultureInfo,并更改CurrencyNegativePattern关联的NumberFormatInfo- 但我会小心翼翼地这样做。通常,您应该相信 .NET 使用的文化信息适合该文化。当然,您需要决定是否确实需要特定于文化的表示形式 - 如果不是,您可能想要使用不变的文化。

于 2013-01-03T11:07:36.220 回答
1

你可以使用这个:

string text = value < 0 ? "-" + (-value).ToString("C") : value.ToString("C");

但请确保本地化设置不会更改以防止出现不可预测的结果(例如 --$ 1.00)

于 2013-01-03T11:07:57.990 回答
0

可以使用该方法获取货币字符串,并且只有在括号中的情况下,去掉括号并添加一个“-”。

private string ToCurrencyString(decimal amount)
{
    string c = amount.ToString("C");
    if (c.StartsWith("(") && c.EndsWith(")"))
    {
        c = "-" + c.SubString(1, c.Length - 2);
    }
    return c;
}
于 2013-01-03T11:09:25.607 回答