从字符串中读取double值
我试图解决这个问题几个小时,绝对不明白编译器在这里做了什么。 我有基本上看起来像这样的字符串:
"KL10124 Traitor #2 - +XX-+0.25 - More Stuff"
并需要以编程方式读取双“0.25”。 调用s以上的字符串,以下两行不起作用:
string[] h = s.Split('-'); string h2 = h[2].Substring(1,h[2].Length - 2); double d = Convert.ToDouble(h2);
如果我显示d的输出是“25”。 我认为这可能取决于’。’ resp’,’文化依赖,但如果我插入
double d = Convert.ToDouble(h2.Replace('.',','));
它没有改变一件事,输出仍然是“25”。
但最后,如果我执行如下的powershell方法,我会在屏幕上得到逐字输出“0,25”
double d; string[] h = s.Split('-'); string h2 = h[2].Substring(1,h[2].Length - 2); if (h2.Contains(".")) { string[] h3 = h2.Split('.'); d = Convert.ToDouble(h3[0]) + Convert.ToDouble(h3[1])/100; } else { d = Convert.ToDouble(h2); } return d;
为什么前两个版本不起作用? 最后一点代码不是正确的方法。
尝试使用
double d = Convert.ToDouble(h2, CultureInfo.InvariantCulture);
代替
double d = Convert.ToDouble(h2);
许多人已经提到过使用Regex。 如果您对Regex不是很熟悉,那么这个页面可能对您有所帮助:
干杯
d = double.Parse(h2,CultureInfo.InvariantCulture);
您需要将转换操作的格式提供程序设置为不变。
尝试正则表达式方式:
string input = "KL10124 Traitor #2 - +XX-+0.25 - More Stuff"; Match match = Regex.Match(input, "^.*([0-9]+\\.[0-9]+).*$"); if (match.Success) { double value = Convert.ToDouble(match.Groups[1].Value, CultureInfo.InvariantCulture); Console.Write(value); }
你应该在转换前看看h2。 看起来它不包括小数点。 Convert.ToDouble可能要求前导0知道它也是一个分数,我不确定。
一般来说,使用正则表达式会更容易。 看到这个答案 。
使用这样的RegEx查询:
^KL\d+ Traitor #\d \- \+XX\-\+(\d+\.\d+) \- .+
分组(括号中的表达式)将给出结果。
查看沙箱 。
在第一个代码示例中打印h2,以查看是否正确执行子字符串提取。
同样使用正则表达式来提取数字会更加直截了当。
使用正则表达式
(?<=\+)([0-9\.])+