双重解析文化格式

我有一个双号作为字符串。 这个数字是

202.667,40

这是202667.4

我如何解析此字符串以获取如下值:Double.Parse(“202.667,40”,?这里是什么),或获取该值的任何其他方法将是伟大的。 谢谢

首先,你需要知道这个数字来自哪个文化,然后:

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); 

我想我找到了一个不需要文化的解决方案。 无论文化如何,使用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”将导致解析错误,因此格式应与您的预期输入匹配。

希望这有助于某人..

您可以使用Double.Parse(your_number,CultureInfo.CurrentCulture)并使用Thread.CurrentThread.CurrentCulture相应地设置CurrentCulture。

例:

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

然后

 Double.Parse(your_number, CultureInfo.CurrentCulture); 

请注意,如果将文化显式分配给CurrentThread,则它仅适用于该线程。

为了获得更大的灵活性,您可以设置NumberDecimalSeparator

  string number = "202.667,40"; double.Parse(number.Replace(".", ""), new CultureInfo(CultureInfo.CurrentCulture.Name) {NumberFormat = new NumberFormatInfo() {NumberDecimalSeparator = ","}}); 

我不想在所有分析中指定语言环境,而是更喜欢设置应用程序范围的语言环境,但如果字符串格式在应用程序中不一致,则可能无效。

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

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

 var val=double.Parse( yourValue, CultureInfo.InvariantCulture); 

http://www.erikschierboom.com/2014/09/01/numbers-and-culture/

 Double.Parse("202.667,40", new System.Globalization.CultureInfo("de-DE")); 

而不是de-DE使用字符串所在的任何文化。