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

问题描述 投票:11回答:7

根据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"));
.net tostring
7个回答
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)

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

int value = -12345;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyNegativePattern = 1;
string numberAsCurrency = value.ToString("C");

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)

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
投票

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


3
投票

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

所以你可以克隆你当前的CultureInfo,并改变相关的CurrencyNegativePatternNumberFormatInfo - 但我会警惕这样做。一般来说,您应该相信.NET使用的文化信息适合该文化。您需要决定是否确实需要特定于文化的表示 - 如果不是,您可能想要使用不变文化。


1
投票

你可以用这个:

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

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


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;
}
© www.soinside.com 2019 - 2024. All rights reserved.