17

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

202.667,40

这是 202667.4

如何解析此字符串以获取如下值:Double.Parse("202.667,40",?what here),或任何其他获取值的方法都会很棒。谢谢

4

7 回答 7

34

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

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);
于 2011-02-24T20:10:26.593 回答
10

我想我找到了一个不需要文化的解决方案。使用 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())可能因 Culture(!) 而异。
请注意,将输入更改为“202,667.40”将导致解析错误,因此格式应与您的预期输入匹配。

希望这可以帮助某人..

于 2011-03-08T20:46:54.520 回答
3

不必在所有解析中指定语言环境,我更喜欢设置应用程序范围的语言环境,尽管如果字符串格式在整个应用程序中不一致,这可能不起作用。

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

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

于 2015-04-17T09:20:25.460 回答
2

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

例子:

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

然后稍后

Double.Parse(your_number, CultureInfo.CurrentCulture);

请注意,如果您将区域性显式分配给 CurrentThread,则它仅适用于该线程。

于 2011-02-24T20:10:12.053 回答
2

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

string number = "202.667,40";
double.Parse(number.Replace(".", ""), new CultureInfo(CultureInfo.CurrentCulture.Name) {NumberFormat = new NumberFormatInfo() {NumberDecimalSeparator = ","}});
于 2011-02-24T20:11:35.787 回答
1
Double.Parse("202.667,40", new System.Globalization.CultureInfo("de-DE"));

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

于 2011-02-24T20:14:10.657 回答
1
var val=double.Parse( yourValue, CultureInfo.InvariantCulture);

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

于 2018-04-09T09:30:51.013 回答