Dan*_*7el 11 .net c# globalization iformatprovider
我们目前正在使用以下内容在我们的网络应用程序中创建美元价值:
string.Format("{0:C0}", dollarValue );
Run Code Online (Sandbox Code Playgroud)
在这个例子中,如果dollarValue是145,那么我们将看到:145美元.如果它是-145,那么我们将看到(145美元)而不是 - 145美元.请注意,对于我们来说,dollarValue是一个double,但它可以是任何数字类型.我认为.
无论如何,我想要的是145美元或145美元.
现在,根据我的研究,使用NumberFormatInfo类可能会这样做.我无法弄清楚如何使用它,我找不到任何有效的例子.我确实在这里看到了这个问题:当货币值为0.00美元时,C#创建一个自定义的NumberFormatInfo来显示"Free"但是来自这个问题的MSDN示例似乎与我真正想做的有点不同.
我意识到,我需要做以下事情:
double dollarValue = -145d;
string myMoney = dollarValue.ToString( "C0", someIFormatProvider );
Run Code Online (Sandbox Code Playgroud)
someIFormatProvider可能是NumberFormatInfo类型.现在,我所做的就是:
NumberFormatInfo ni = new NumberformatInfo();
ni.CurrencyNegativePattern = 1; // The value 1 should mean not to use parenthesis
string myMoney = dollarValue.ToString( "C0", ni );
Run Code Online (Sandbox Code Playgroud)
...我得到一个"Instance is Read-Only"异常.虽然CurrencyNegativePattern属性的"文档"说你可以设置和获取值,但显然你不能.此外,NumberFormatInfo是一个密封类.我不能轻易地创建一个基于它的新类并覆盖该值.
我不知道如何处理这个问题.现在,我的解决方法是只是否定我的负面价值,并得到一个积极的结果,我string.Format(...)再次做.是的,我意识到前面没有负面的迹象,但是,当然,通过在结果前面根据需要添加" - "可以很容易地解决这个问题.
有人能够为我提供一个如何在这种情况下正确有效地使用NumbefFormatInfo类的工作示例吗?谢谢.
Jon*_*yna 12
您可以在中复制NumberFormat属性CurrentCulture(如果您的应用程序全球化,这将确保您保留正确的货币符号).之后,只需在设置CurrencyNegativePattern属性所需的值,并在您传递NumberFormatInfo的double.ToString()功能,如下所示:
NumberFormatInfo noParens = (NumberFormatInfo)CultureInfo.CurrentCulture.NumberFormat.Clone();
noParens.CurrencyNegativePattern = 1;
double dollarValue = -145d;
string output = dollarValue.ToString("C0", noParens); // outputs -$145
Run Code Online (Sandbox Code Playgroud)
double dollarValue = -145d;
System.Globalization.CultureInfo modCulture = new System.Globalization.CultureInfo("en-US");
string mymoney = dollarValue.ToString("C", modCulture);
MessageBox.Show(mymoney);
Run Code Online (Sandbox Code Playgroud)
如果您的操作系统当前文化是 en-US,那么您不需要以下行
System.Globalization.CultureInfo modCulture = new System.Globalization.CultureInfo("en-US");
Run Code Online (Sandbox Code Playgroud)
代码将是
double dollarValue = -145d;
string mymoney = dollarValue.ToString("C");
Run Code Online (Sandbox Code Playgroud)
如果你想使用 NumberFormatInfo
double dollarValue = -145d;
System.Globalization.CultureInfo modCulture = new System.Globalization.CultureInfo("en-US");
NumberFormatInfo number = modCulture.NumberFormat;
string mymoney = dollarValue.ToString("C", number);
Run Code Online (Sandbox Code Playgroud)
其他方式
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);
Run Code Online (Sandbox Code Playgroud)