我有一个双号作为字符串。数字是
202.667,40
哪个是202667.4
如何解析此字符串以获取如下值:Double.Parse(“202.667,40”,?这里有什么),或者获取该值的任何其他方法都会很棒。感谢
答案 0 :(得分:31)
首先,你需要知道这个数字来自哪个文化,然后:
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);
答案 1 :(得分: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())可能因文化而异(!)
请注意,将输入更改为“202,667.40”将导致解析错误,因此格式应与预期输入匹配。
希望这有助于某人..
答案 2 :(得分:2)
为了获得更大的灵活性,您可以设置NumberDecimalSeparator
string number = "202.667,40";
double.Parse(number.Replace(".", ""), new CultureInfo(CultureInfo.CurrentCulture.Name) {NumberFormat = new NumberFormatInfo() {NumberDecimalSeparator = ","}});
答案 3 :(得分:1)
您可以使用Double.Parse(your_number,CultureInfo.CurrentCulture)并使用Thread.CurrentThread.CurrentCulture相应地设置CurrentCulture。
示例:
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");
然后再
Double.Parse(your_number, CultureInfo.CurrentCulture);
请注意,如果您明确地将文化分配给CurrentThread,它只适用于该线程。
答案 4 :(得分:1)
我不想在所有分析中指定语言环境,而是更喜欢设置应用程序范围的语言环境,但如果字符串格式在应用程序中不一致,则可能无效。
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("pt-PT");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("pt-PT");
在应用程序开始时定义它将使所有双解析期望逗号作为小数分隔符。
答案 5 :(得分:1)
var val=double.Parse( yourValue, CultureInfo.InvariantCulture);
http://www.erikschierboom.com/2014/09/01/numbers-and-culture/
答案 6 :(得分:0)
Double.Parse("202.667,40", new System.Globalization.CultureInfo("de-DE"));
而不是de-DE使用字符串所在的任何文化。