2011-02-24 77 views
11

我有一個雙數字作爲字符串。數量是雙解析與文化格式

202.667,40

這是202667.4

如何可以解析此字符串來得到這樣的價值:Double.Parse( 「202.667,40」,這裏是什麼)或任何其他方法來獲得價值會很好。謝謝

+6

使用以逗號作爲小數點的文化的CultureInfo。例如德國。最好匹配任何國家的字符串來自。 – 2011-02-24 20:07:41

回答

26

首先,你需要知道哪些文化這個數字是從,則:

CultureInfo culture = new CultureInfo("de"); // I'm assuming german here. 
double number = Double.Parse("202.667,40", culture); 

如果你想使用當前線程的文化,在默認情況下是當前用戶的一組解析:

double number = Double.Parse("202.667,40", CultureInfo.CurrentCulture); 
+1

使用「de」會導致NotSupportedException異常。 「Culture'de'是一種中性文化,它不能用於格式和解析,因此不能被設置爲線程的當前文化。」 也許你想要「DE DE」? – 2014-04-14 16:10:07

1

您可以使用Double.Parse(your_number,CultureInfo.CurrentCulture)並相應地使用Thread.CurrentThread.CurrentCulture設置CurrentCulture。

例子:

Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES"); 

後來

Double.Parse(your_number, CultureInfo.CurrentCulture); 

請注意,如果明確指定了文化的CurrentThread,它只適用於線程。

1

更多的靈活性,你可以設置NumberDecimalSeparator

string number = "202.667,40"; 
         double.Parse(number.Replace(".", ""), new CultureInfo(CultureInfo.CurrentCulture.Name) {NumberFormat = new NumberFormatInfo() {NumberDecimalSeparator = ","}}); 
0
Double.Parse("202.667,40", new System.Globalization.CultureInfo("de-DE")); 

而不是去DE使用任何文化字符串在。

8

我想我已經發現了不需要文化的解決方案。使用的NumberFormatInfo可以強制格式,無論文化:

// This is invariant 
NumberFormatInfo format = new NumberFormatInfo(); 
// Set the 'splitter' for thousands 
format.NumberGroupSeparator = "."; 
// Set the decimal seperator 
format.NumberDecimalSeparator = ","; 

再後來:

System.Diagnostics.Debug.WriteLine(double.Parse("202.667,40", format))); 

輸出:
202667,4

當然,這輸出 (內部toString())可能會因文化而異(!)
請注意,將輸入更改爲「202,667.40」將導致一個解析錯誤,所以格式應該符合您的預期輸入。

希望這可以幫助別人..

0

而不必在所有解析到指定場所的,我喜歡設置程序範圍的地方,但如果字符串格式不跨應用程序一致,這可能無法正常工作。

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("pt-PT"); 
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("pt-PT"); 

在應用程序開始時定義它將使得所有雙解析期望逗號作爲小數定界符。