2011-02-24 78 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"); 

在应用程序开始时定义它将使得所有双解析期望逗号作为小数定界符。