双重解析文化格式

Rya*_*yan 14 c# int32

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

202.667,40

这是202667.4

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

Coi*_*oin 31

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

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

如果要使用当前线程文化进行解析,默认情况下是当前用户设置的线程文化:

double number = Double.Parse("202.667,40", CultureInfo.CurrentCulture);
Run Code Online (Sandbox Code Playgroud)

  • 使用"de"会导致为我抛出NotSupportedException."Culture'de'是一种中性文化.它不能用于格式化和解析,因此不能被设置为线程的当前文化." 也许你想要"de-DE"? (4认同)

小智 10

我想我找到了一个不需要文化的解决方案.无论文化如何,使用NumberFormatInfo都可以强制使用格式:

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

然后呢:

System.Diagnostics.Debug.WriteLine(double.Parse("202.667,40", format)));
Run Code Online (Sandbox Code Playgroud)

产出:
202667,4

当然,此输出(内部toString())可能因文化(!)而异.
请注意,将输入更改为"202,667.40"将导致解析错误,因此格式应与您的预期输入匹配.

希望这有助于某人..