从字符串读取double值(Reading a double value from a string

2019-07-31 04:02发布

我试图解决这个几个小时,完全不明白编译器在这里做。 我有一个字符串,基本上是这样的:

"KL10124 Traitor #2 - +XX-+0.25 - More Stuff"

并需要读出双“0.25”编程。 调用以上人民政府字符串,下面两行不工作:

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”。

但最后,如果我做的蛮力方法如下我得到的屏幕上逐字输出“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;

为什么不完全相同的前两个版本无法正常工作? 代码的最后一点不能做到这一点的正确方法。

Answer 1:

尝试使用

double d = Convert.ToDouble(h2, CultureInfo.InvariantCulture);

代替

double d = Convert.ToDouble(h2);


Answer 2:

许多人已经开始使用正则表达式已经提到。 如果你不是很熟悉正则表达式,那么这个页面可以帮助你:

http://txt2re.com/index-csharp.php3?s=%22KL10124%20Traitor%20%232%20-%20%2bXX-%2b0.25%20-%20More%20Stuff%22&-7

干杯



Answer 3:

d = double.Parse(h2,CultureInfo.InvariantCulture);

你需要转换操作的格式提供设置不变。



Answer 4:

尝试正则表达式的方法:

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);
}


Answer 5:

你应该看看H2你转换之前。 它看起来像它不包括小数点。 Convert.ToDouble可能需要领先的0至知道这是一小部分也是,我不能肯定。

一般来说,这是更容易使用正则表达式很多。 见这个答案 。



Answer 6:

使用正则表达式查询是这样的:

^KL\d+ Traitor #\d \- \+XX\-\+(\d+\.\d+) \- .+

一个分组(括号表达式)会给你的结果。

见沙箱 。



Answer 7:

在第一个代码示例打印H2看到,如果你正确地做子提取。

还使用正则表达式来提取NUMER会更straigthforward。



Answer 8:

使用表达式

(?<=\+)([0-9\.])+


文章来源: Reading a double value from a string
标签: c# .net double