我有一个双精度浮点数的字符串。这个数字是
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”将导致解析错误,因此格式应与您期望的输入匹配。
希望这能帮助某些人..
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");
Double.Parse(your_number, CultureInfo.CurrentCulture);
与其在所有解析中指定语言环境,我更喜欢设置应用程序范围的语言环境,但如果应用程序中字符串格式不一致,则可能无法实现。
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("pt-PT");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("pt-PT");
在应用程序的开头定义这个设置,将使得所有的双精度解析都期望逗号作为小数分隔符。
为了更加灵活,您可以设置NumberDecimalSeparator
string number = "202.667,40";
double.Parse(number.Replace(".", ""), new CultureInfo(CultureInfo.CurrentCulture.Name) {NumberFormat = new NumberFormatInfo() {NumberDecimalSeparator = ","}});
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,而是使用字符串所在的任何文化。