2014-11-03 55 views
2

我試圖分裂各運營商之間的等式,但String.Split法輸出了錯誤的號碼String.Split方法無法按照預期工作

代碼:

string tmpEquation = "200.2−-23.5"; 
double[] Numbers; 
Numbers = tmpEquation.Split(new char[] { '+', '−', '*', '/' }) 
      .Select(s => Double.Parse(s)) 
      .ToArray() 
; 

輸出:

Number[0] = 2002.0 
Number[1] = -235.0 

它應該是:

Number[0] = 200.2 
Number[1] = -23.5 

我在做什麼錯?

+1

@HuorSwords不要這樣做。解決*語言環境問題的一個壞方法*。 – 2014-11-03 21:43:40

+0

我不認爲你會得到第二個數字-235,因爲你正在分裂 - 它會刪除減號。 – 2014-11-03 21:44:03

+1

@ Selman22這是兩個不同的字符,用於區分負數和操作員。 – Encore 2014-11-03 21:45:13

回答

5

解析是文化敏感的。可能您的文化使用與dot (.)不同的小數點分隔符。您可以使用InvariantCulture進行分析:

Numbers = tmpEquation.Split(new char[] { '+', '−', '*', '/' }) 
     .Select(s => Double.Parse(s, CultureInfo.InvariantCulture)) 
     .ToArray() 
+1

謝謝!因爲我們在德國使用','作爲小數點,所以我總是對它的','或'。'感到困惑。 – Encore 2014-11-03 21:47:45

+2

@Encore作爲一邊你可以得到你的文化的小數點分隔符:'CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator' – 2014-11-03 21:50:01