Int.ToString(" C")删除否定符号

时间:2013-01-03 11:02:35

标签: .net tostring

根据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 

那么,我如何使用减号符号保留它,我是否必须使用包含(“ - ”)方法,如果它是真的,请添加 - 重新开启。

像这样的代码(如果编码不正确而道歉,但你明白了。)

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

7 个答案:

答案 0 :(得分:15)

这取决于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)

虽然根据您对远程服务器的评论并且您总是希望以特定方式进行格式化,但最好只将整个线程的文化设置为受控值,这将影响所有后续{{ 1}}调用该线程:

ToString()

答案 1 :(得分: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)

答案 2 :(得分: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 Property了解详情...

答案 3 :(得分:3)

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

答案 4 :(得分:3)

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

因此,您可以克隆您当前的CultureInfo,并更改相关CurrencyNegativePattern的{​​{1}} - 但我会谨慎这样做。一般来说,您应该相信.NET使用的文化信息适合该文化。您需要决定是否想要特定于文化的表示,当然 - 如果没有,您可能想要使用不变文化。

答案 5 :(得分:1)

你可以用这个:

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

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

答案 6 :(得分: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;
}