在全局线程中更改 NumberFormat 分隔符后,十进制解析抛出异常 [关闭]
Posted
技术标签:
【中文标题】在全局线程中更改 NumberFormat 分隔符后,十进制解析抛出异常 [关闭]【英文标题】:Decimal Parse is throwing exception after changing NumberFormat Seperator in Global Thread [closed] 【发布时间】:2014-02-19 17:16:20 【问题描述】: I have changed Global Application Culture thread for currency number format in (fr-CA) as shown below.
Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyPositivePattern = 1;
Thread.CurrentThread.CurrentUICulture.NumberFormat.CurrencyNegativePattern = 5;
CultureInfo CADCultureref = new CultureInfo("fr-CA");
CADCultureref = Thread.CurrentThread.CurrentCulture;
NumberFormatInfo CADNumFormatref = new NumberFormatInfo();
CADNumFormatref = Thread.CurrentThread.CurrentCulture.NumberFormat;
CADNumFormatref.CurrencyGroupSeparator = ".";
CADNumFormatref.CurrencyDecimalSeparator = ",";
CADCultureref.NumberFormat = CADNumFormatref;
Thread.CurrentThread.CurrentCulture = CADCultureref;
Thread.CurrentThread.CurrentUICulture = CADCultureref;
然后我尝试从货币中解析值,如下所示:
Decimal digit = 1000000;
String currency = digit.ToString("C"); // 1.000.000,00$ (fr-CAD)
decimal parseValue = decimal.Parse(currency , System.Globalization.NumberStyles.Currency | System.Globalization.NumberStyles.Number);
解析值时出现异常“Input String is not in correct format”。
CurrentThread 的 Numberformatinfo 中的组分隔符和小数分隔符更改,无法解析。
我需要用“,”代替“。”和 ”。”代替“,”。
【问题讨论】:
这段代码从何而来?如果您在问题中添加了一些代码,请输入可编译的实际代码。 我不知道它是什么语言,但肯定不是 C#。 可能需要指出的是,法国人用欧元玩大富翁,而不是美元。 我再次更新我的问题。让我知道现在可以理解了吗? 【参考方案1】:不清楚您的问题是什么,但通常最好将文化信息/数字格式明确传递给格式化和解析函数,例如:
var numberFormat = new CultureInfo( "en-US", false ).NumberFormat;
numberFormat.CurrencyDecimalSeparator = ",";
numberFormat.CurrencyGroupSeparator = ".";
Console.WriteLine(400000.ToString("C", numberFormat)); // Output: $ 4.000,00
Console.WriteLine(
decimal.Parse(400000.ToString("C", numberFormat),
NumberStyles.Currency | NumberStyles.Number,
numberFormat));
【讨论】:
以上是关于在全局线程中更改 NumberFormat 分隔符后,十进制解析抛出异常 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Android 的 NumberFormat 使用逗号作为澳大利亚的小数分隔符?
NumberFormat 不能用作系统区域设置的千位分隔符?