2012-12-12 195 views
1

我現在面臨一個問題,當字符串的字符串值轉換爲雙精度值。 如:Convert.ToDouble拋出錯誤的法語系統

string val="2.0"; 
double dval=Convert.ToDouble(val); 

在法國的系統上執行這個代碼,因爲在法國引發了錯誤,他們使用,(逗號)而不是(點)。

任何解決方案???

+3

還要幫你解析成功,或者您需要'val'有逗號? –

+0

它引發錯誤的原因是因爲它期望字符串在當前的文化中。如果字符串來自用戶輸入(例如,法國人會輸入2,0),則這可以按預期工作。如果字符串來自其他地方(例如數據庫),您將知道該字符串是什麼文化。所以它有點取決於你想如何表現。 – craftworkgames

回答

10
Convert.ToDouble(val, System.Globalization.CultureInfo.InvariantCulture); 

Double.Parse(val, System.Globalization.CultureInfo.InvariantCulture); 
2

使用正確的文化解析數據。

如果 「2.0」 來自一些標準源(即XML)使用CultureInfo.InvariantCulture(如abatishcev建議的)。

如果「2.0」從已知的文化來自於用戶的輸入 - 使用文化(樣品爲EN-US):

double dval = Double.Parse("2.0", new CultureInfo("en-US")); 

如果是從本地用戶輸入應該是在正確的用戶的文化設置 - 「fr-FR」應該是「2,0」。

如果你不知道用什麼文化精神的進入「2.0」值最好是簡單地停下來思考應該用什麼樣的文化。

+0

'CultureInfo.InvariantCulture'要便宜並具有分隔爲一個點的規範,但仍然是一個很好的和有效的點。 – abatishchev