如何使用的NumberFormatInfo删除负值括号(How to use NumberForma

2019-06-25 10:49发布

目前,我们正在使用我们的web应用程序创建的美元值如下:

string.Format("{0:C0}", dollarValue );

在这个例子中,如果dollarValue是145,然后我们会看到:$ 145。 如果是-145,然后我们会看到($ 145),而不是 - $ 145。 请注意,对于我们来说,dollarValue是双重的,但它可以是任何数量的类型。 我认为。

无论如何,我要的是为它选用以下$ 145或 - $ 145

现在,根据我的研究,有可能做到这一点使用的NumberFormatInfo类。 我无法弄清楚如何使用它,我无法找到任何有效的例子。 我在这里看到了这个问题: C#创建自定义的NumberFormatInfo显示“自由”时,货币的价值为$ 0.00美元 ,但链接到这个问题似乎从我真正想要做的有点不同,从MSDN的例子。

我意识到,我需要做以下的事情:

double dollarValue = -145d;
string myMoney = dollarValue.ToString( "C0", someIFormatProvider );

其中someIFormatProvider是有可能的类型的NumberFormatInfo的。 现在,我所做的是这样的:

NumberFormatInfo ni = new NumberformatInfo();
ni.CurrencyNegativePattern = 1; // The value 1 should mean not to use parenthesis
string myMoney = dollarValue.ToString( "C0", ni );

...我得到一个“实例为只读”的异常。 虽然“文件”为CurrencyNegativePattern物业说,你可以设置和获取价值,显然,你不能。 此外,的NumberFormatInfo是密封类。 我不能轻易地创建基于关闭它一个新的类,并重写值。

我在一个不知如何处理这个。 现在,我的解决方法是只否定我的负值,并有一个积极的结果,我做string.Format(...)一次。 是的,我知道有在这方面没有任何负面迹象,但是,当然,这是很容易被添加解决“ - ”在结果前需要。

会有人能够向我提供的如何有效地在这种情况下正确使用NumbefFormatInfo类工作的例子吗? 谢谢。

Answer 1:

double dollarValue = -145d;
 System.Globalization.CultureInfo modCulture = new System.Globalization.CultureInfo("en-US");
 string mymoney = dollarValue.ToString("C", modCulture);
          MessageBox.Show(mymoney);

如果您的操作系统当前区域性为en-US,那么你不需要下面一行

System.Globalization.CultureInfo modCulture = new System.Globalization.CultureInfo("en-US");

该代码会

double dollarValue = -145d;
string mymoney = dollarValue.ToString("C");

如果你想用的NumberFormatInfo做

double dollarValue = -145d; 
System.Globalization.CultureInfo modCulture = new System.Globalization.CultureInfo("en-US");
     NumberFormatInfo number = modCulture.NumberFormat;
     string mymoney = dollarValue.ToString("C", number);

其他方式

double dollarValue = -145d;
System.Globalization.CultureInfo modCulture = new System.Globalization.CultureInfo("en-US");
NumberFormatInfo number = modCulture.NumberFormat;
string mymoney = dollarValue.ToString(String.Format("C",number));
Console.WriteLine(mymoney);


Answer 2:

您可以进行的副本NumberFormat在物业CurrentCulture (这将确保您保持正确的货币符号,如果你的全球化应用程序)。 之后,只需在设置CurrencyNegativePattern属性为需要的值,并通过在你NumberFormatInfodouble.ToString()函数,就像这样:

NumberFormatInfo noParens = (NumberFormatInfo)CultureInfo.CurrentCulture.NumberFormat.Clone();
noParens.CurrencyNegativePattern = 1;
double dollarValue = -145d;
string output = dollarValue.ToString("C0", noParens); // outputs -$145


Answer 3:

试试这个...

string.Format( "{0:$#.;-$#.}", -145 )

要么

dollarValue.ToString("$#.;-$#.")


Answer 4:

“实例是只读的”意思是你有一个只读实例NumberFormatInfo 。 您可以通过克隆只读实例获得一个可写的实例:

NumberFormatInfo writeable = (NumberFormatInfo) ni.Clone();


Answer 5:

你确定CurrencyNegativePattern不能分配? 我试着用此代码:

double dollarValue = -145d;
System.Globalization.NumberFormatInfo ni = new System.Globalization.NumberFormatInfo();
ni.CurrencyNegativePattern = 1;
dropDownList.Items.Add(new ListItem(dollarValue.ToString("C0", ni)));

和它的成功。



Answer 6:

为了确保您留在“美语境”我会做这样的事情:

double val = -145d;
NumberFormatInfo nfi = new CultureInfo("en-US").NumberFormat;
nfi.CurrencyNegativePattern = 1;
val.ToString("C0", nfi).Dump();

Dump来自LinqPad,显示-$145结果。

你所得到的错误感觉就像是来自于你让你NumberFormatInfo是这样的:

NumberFormatInfo nfi = Thread.CurrentThread.CurrentCulture.NumberFormat;

在这种情况下,我想通过这样的替换:

NumberFormatInfo nfi = (NumberFormatInfo)Thread.CurrentThread.CurrentCulture.NumberFormat.Clone();


文章来源: How to use NumberFormatInfo to remove parenthesis for negative values