2013-04-27 67 views

回答

9

那是因爲你的文化設置,您可以指定培養Parse方法來獲得所需的輸出:

string a = "10.23"; 
double b = double.Parse(a, System.Globalization.CultureInfo.InvariantCulture); 
// b == 10.23 
9

在德國逗號(,)作爲小數點,而大多數英語文化和您的示例使用句號(.)作爲小數點。由於Double.Parse使用線程默認文化來解析數字,並且線程默認文化設置爲德語,因此您得到錯誤的結果。

而應該明確指定文化:

using System.Globalization; 

string a = "10.23"; 
double b = Double.Parse(a, CultureInfo.InvariantCulture); 

不變文化使用句號作爲小數點,所以我建議你使用來代替。或者,如果您從已知使用特定文化習俗書寫的來源獲取該字符串,請改爲使用該文化。

1

或者您的號碼所在地格式化,試試這個我來源:

分機:

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(); 
    } 
} 
+0

我喜歡的TryParse不是直接解析多。這是優雅的解決方案。 – 2013-04-27 12:53:33

相關問題