2014-02-08 77 views
2

我在C#初學者。我試圖將string轉換爲double。下面是該方法double.Parse()代碼:將字符串轉換到雙例外

static void Main(string[] args) 
{ 
    string s="0.5"; 
    double b = double.Parse(s); 
    Console.WriteLine("double.Parse() - {0}",b); 
} 

System.Convert.ToDouble()嘗試過:

static void Main(string[] args) 
{ 
    string s="0.5"; 
    double b = System.Convert.ToDouble(s); 
    Console.WriteLine("Convert.ToDouble() - {0}",b); 
} 

在這兩個方面的計劃拋出異常:

「輸入字符串不在正確的格式「。

請幫助!。提前致謝。

+6

看起來你有逗號','因爲在當前的文化 –

+0

十進制數字分隔兩個例子都應該只從運行.NET 2.0精細 - 4.5.1。你能粘貼包括使用語句在內的完整源代碼嗎? –

回答

3

我認爲當前的文化有「」作爲小數點分隔符,如果是這樣的話,既可以使用的‘0,5’,而不是‘0.5’或更改分隔符:

var s="0.5"; 
var culture = CultureInfo.CurrentCulture.Clone(); 
culture.NumberFormat.NumberDecimalSeparator = "."; 
var b = double.Parse(s, culture); 

Console.WriteLine("double.Parse() - {0}",b); 

嘗試,看看它是否修復它。

+0

當我複製文本時,在CustureInfo中出現錯誤,但是當我編輯文本時,它工作。真的謝謝你! –

+0

啊,好吧,剛剛更新了一些在我的電腦上工作的東西。很高興我能幫上忙。 –

4

正如謝爾蓋Berezovskiy評論說,這可能是因爲你的機器的文化用途,而不是。作爲小數點分隔符。如果你想強制它使用。 (考慮影響),您必須使用invariant culture進行解析。在this article的底部有很多關於如何實現這個目標的例子。

+0

+1指出不變文化。 – user2864740

2

謝爾蓋是completely right

Convert.ToDouble methodDouble.Parse method使用CurrentCulture作爲默認值。

看起來像你目前的文化NumberFormatInfo.NumberDecimalSeparator property不是.這就是爲什麼你的代碼拋出FormatException

作爲解決方案,您可以在解析代碼之前在代碼中將NumberDecimalSeparator設置爲.

CultureInfo c = CultureInfo.CurrentCulture; 
c.NumberFormat.NumberDecimalSeparator = "."; 
double b = Double.Parse(s, c); // Or Convert.ToDouble(s, c) 

順便提一句,使用Convert.ToDouble(String)方法等效於Double.Parse(String)方法。