我試圖解析一個字符串到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