Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将复杂字符串拆分为3个部分_C#_String_Split - Fatal编程技术网

C# 将复杂字符串拆分为3个部分

C# 将复杂字符串拆分为3个部分,c#,string,split,C#,String,Split,我正在与measurement isntrument通信,它以单个字符串返回数据。输出如下所示: string result = "-3.546714E-10A,+0.000000E+00,+5.120000E+02\n"; 所以我对这个字符串感兴趣的是第一部分和第二部分。第一部分是以安培为单位的电流,第二部分是时间戳(测量时间) 我正在尝试此代码,但不起作用: temp = result.Split(','); tipair = new Results.TIPair(); tipair.C

我正在与measurement isntrument通信,它以单个字符串返回数据。输出如下所示:

string result = "-3.546714E-10A,+0.000000E+00,+5.120000E+02\n";
所以我对这个字符串感兴趣的是第一部分和第二部分。第一部分是以安培为单位的电流,第二部分是时间戳(测量时间)

我正在尝试此代码,但不起作用:

temp = result.Split(',');

tipair = new Results.TIPair();
tipair.Current = float.Parse(temp[0]);
tipair.Time = float.Parse(temp[1]);
理想情况下,我希望当前值为
-3.546714E-10
,时间值为
0
(时间为任意正数)

更新:我试着像下面这样做,但我得到了非常糟糕的数字(比应该的大得多!)


在第一部分,它不知道安培单位

您尝试将“-3.546714E-10A”解析为float

您应首先用以下方法切断“A”:

part[0].TrimEnd('A')
更新:

检查问题以进行科学分析


顺便说一下:float可以处理7个字符的精度(您正在充分使用)。如果你得到更精确的值,你应该使用双精度(15-16精度)

它不知道第一部分的安培单位

您尝试将“-3.546714E-10A”解析为float

您应首先用以下方法切断“A”:

part[0].TrimEnd('A')
更新:

检查问题以进行科学分析


顺便说一下:float可以处理7个字符的精度(您正在充分使用)。如果您获得更精确的值,则应使用双精度(15-16精度)

您可以使用以下参数分析当前值:

MSDN,:

AllowExponent表示数字字符串可以采用指数表示法。AllowExponent标志允许解析字符串 包含以“E”或“E”字符开头的指数,以及 后跟可选的正负号和 整数换句话说,它成功地解析了表单中的字符串 nnnExx、nnnE+xx和nnnE-xx。它不允许使用十进制分隔符或 在有效位或尾数上签名;允许在 要分析的字符串,请使用AllowDecimalPoint和AllowReadingSign 标记,或使用包含这些单独标记的复合样式


您可以使用以下命令分析当前数据:

MSDN,:

AllowExponent表示数字字符串可以采用指数表示法。AllowExponent标志允许解析字符串 包含以“E”或“E”字符开头的指数,以及 后跟可选的正负号和 整数换句话说,它成功地解析了表单中的字符串 nnnExx、nnnE+xx和nnnE-xx。它不允许使用十进制分隔符或 在有效位或尾数上签名;允许在 要分析的字符串,请使用AllowDecimalPoint和AllowReadingSign 标记,或使用包含这些单独标记的复合样式


我试图通过子字符串删除那个字符,但它给了我一个大的数字。也许浮点没有正确读取?嗯,不知道,我现在手头没有编译器。。。但是类似的东西:)@Sean87:TrimEnd(),没有像TrimRight()这样的方法。我试图通过子字符串删除该字符,但它给了我一个bigg数。也许浮点没有正确读取?嗯,不知道,我现在手头没有编译器。。。但是像这样的:)@Sean87:TrimEnd(),没有像TrimRight()这样的方法。
10A
是像10Amper一样有价值的部分吗?
10A
是像10Amper一样有价值的部分吗?谢谢你的详细信息。它真的应该是双倍的吗?因为稍后我想在位图上绘制它们,我想我只限于PointF,它只适用于float??您可以将double更改为float,并且所有内容都会被很好地解析,谢谢您提供的详细信息。它真的应该是双倍的吗?因为后来我想在位图上绘制它们,我想我只限于PointF,它只适用于float??你可以将double改为float,所有的都可以很好地解析
string result = "-3.546714E-10A,+0.000000E+00,+5.120000E+02\n";
var parts = result.Split(',');

double current = double.Parse(parts[0].Remove(parts[0].Length - 1),
                        NumberStyles.AllowExponent | NumberStyles.Number);
double time = double.Parse(parts[1],
                        NumberStyles.AllowExponent | NumberStyles.Number);