【发布时间】:2011-02-24 20:03:39
【问题描述】:
我有一个双数作为字符串。号码是
202.667,40
202667.4
我怎样才能解析这个字符串来得到这样的值:Double.Parse("202.667,40",?what here),或者任何其他获取值的方法都会很棒。谢谢
【问题讨论】:
-
使用使用逗号作为小数点的区域性的 CultureInfo。以德国为例。最好匹配字符串来自的任何国家。
我有一个双数作为字符串。号码是
202.667,40
202667.4
我怎样才能解析这个字符串来得到这样的值:Double.Parse("202.667,40",?what here),或者任何其他获取值的方法都会很棒。谢谢
【问题讨论】:
首先,你需要知道这个数字来自哪个文化,然后:
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())可能因 Culture(!)而异
请注意,将输入更改为“202,667.40”将导致解析错误,因此格式应与您的预期输入匹配。
希望这对某人有所帮助..
【讨论】:
不必在所有解析中指定语言环境,我更喜欢设置应用程序范围的语言环境,尽管如果字符串格式在整个应用程序中不一致,这可能不起作用。
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("pt-PT");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("pt-PT");
在您的应用程序开始时定义它将使所有双重解析都期望逗号作为小数分隔符。
【讨论】:
您可以使用 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 = ","}});
【讨论】:
Double.Parse("202.667,40", new System.Globalization.CultureInfo("de-DE"));
使用字符串所在的任何文化而不是 de-DE。
【讨论】:
var val=double.Parse( yourValue, CultureInfo.InvariantCulture);
http://www.erikschierboom.com/2014/09/01/numbers-and-culture/
【讨论】: