我试图解析一个字符串到Double。 这里是我的代码:为什么我的解析Double值不正确?
string a = "10.23";
double b = Double.Parse(a);
但b为1023.0
,我不知道为什么。我想获得10.23的双
我试图解析一个字符串到Double。 这里是我的代码:为什么我的解析Double值不正确?
string a = "10.23";
double b = Double.Parse(a);
但b为1023.0
,我不知道为什么。我想获得10.23的双
那是因为你的文化设置,您可以指定培养Parse
方法来获得所需的输出:
string a = "10.23";
double b = double.Parse(a, System.Globalization.CultureInfo.InvariantCulture);
// b == 10.23
在德国逗号(,
)作为小数点,而大多数英语文化和您的示例使用句号(.
)作为小数点。由于Double.Parse
使用线程默认文化来解析数字,并且线程默认文化设置为德语,因此您得到错误的结果。
而应该明确指定文化:
using System.Globalization;
string a = "10.23";
double b = Double.Parse(a, CultureInfo.InvariantCulture);
的不变文化使用句号作为小数点,所以我建议你使用来代替。或者,如果您从已知使用特定文化习俗书写的来源获取该字符串,请改为使用该文化。
或者您的号码所在地格式化,试试这个我来源:
分机:
public static class Ext
{
public static double? AsLocaleDouble(this string str)
{
var result = double.NaN;
var format = Thread.CurrentThread.CurrentUICulture.NumberFormat;
double.TryParse(str, NumberStyles.AllowDecimalPoint, format, out result);
return result;
}
}
测试:
class Program
{
static void Main(string[] args)
{
var str = "10,23";
Thread.CurrentThread.CurrentUICulture = new CultureInfo("uz-Cyrl-UZ");
Thread.CurrentThread.CurrentCulture = new CultureInfo("uz-Cyrl-UZ");
Console.WriteLine(str.AsLocaleDouble());
Console.ReadKey();
}
}
我喜欢的TryParse不是直接解析多。这是优雅的解决方案。 – 2013-04-27 12:53:33