C# 1.000.000不是双c的有效值#
可能重复:C# 1.000.000不是双c的有效值#,c#,asp.net,.net,globalization,C#,Asp.net,.net,Globalization,可能重复: 尝试使用TypeConverter将“1.000.000”字符串解析为Double时出现异常。 我在异常时刻查看了System.Globalization.NumberFormatInfo,它看起来是这样的: {System.Globalization.NumberFormatInfo} CurrencyDecimalDigits: 2 CurrencyDecimalSeparator: "," CurrencyGroupSeparator: "."
尝试使用
TypeConverter
将“1.000.000”字符串解析为Double
时出现异常。
我在异常时刻查看了System.Globalization.NumberFormatInfo
,它看起来是这样的:
{System.Globalization.NumberFormatInfo}
CurrencyDecimalDigits: 2
CurrencyDecimalSeparator: ","
CurrencyGroupSeparator: "."
CurrencyGroupSizes: {int[1]}
CurrencyNegativePattern: 8
CurrencyPositivePattern: 3
CurrencySymbol: "TL"
DigitSubstitution: None
IsReadOnly: false
NaNSymbol: "NaN"
NativeDigits: {string[10]}
NegativeInfinitySymbol: "-Infinity"
NegativeSign: "-"
NumberDecimalDigits: 2
NumberDecimalSeparator: ","
NumberGroupSeparator: "."
NumberGroupSizes: {int[1]}
NumberNegativePattern: 1
PercentDecimalDigits: 2
PercentDecimalSeparator: ","
PercentGroupSeparator: "."
PercentGroupSizes: {int[1]}
PercentNegativePattern: 2
PercentPositivePattern: 2
PercentSymbol: "%"
PerMilleSymbol: "‰"
PositiveInfinitySymbol: "Infinity"
PositiveSign: "+"
解析“1.000.000”似乎没有问题,但它表示“1.000.000”不是Double
的有效值。有什么问题?
我试图重写Thread.CurrentThread.CurrentCulture
,但也不起作用
编辑::
这似乎也解决了我的问题。类型转换器实际上在没有千分位器的情况下工作。我加了一个,它就开始工作了
可能重复如何使用TypeConverter转换特定于区域性的double?–拉斯穆斯费伯
试试这个
NumberFormatInfo
:
var s = "1.000.000";
var info = new NumberFormatInfo
{
NumberDecimalSeparator = ",",
NumberGroupSeparator = "."
};
var d = Convert.ToDouble(s, info);
只要与NumberGroupSeparator
不同,就可以将NumberDecimalSeparator
更改为其他内容
编辑:您指定的
NumberFormatInfo
也应该可以工作。大多数普通的数字类型都有解析方法。如果您不确定TryParse是否有效,请使用它(尝试将“xyz”解析为数字将引发异常)
对于自定义解析,您可以定义如下所示的NumberFormatInfo:
var strInput = "1.000.000";
var numberFormatInfo = new NumberFormatInfo
{
NumberDecimalSeparator = ",",
NumberGroupSeparator = "."
};
double dbl = Double.Parse(strInput, numberFormatInfo);
这个解决方案也会起作用
var format = new System.Globalization.NumberFormatInfo();
format.NumberDecimalSeparator = ",";
format.NumberGroupSeparator = ".";
double dbl2 = Double.Parse("1.000.000", format);
一个或两个词到您当前的区域性,所需的区域性,您用来解析字符串的代码,以及您如何看待NumberFormatInfo?将其作为一个小而完整的代码段发布。实际上,我在LINQPAD4上将其作为一个小的控制台应用程序,它确实起到了作用。但它似乎不适用于大型应用程序本身。还有什么要看的吗