C# 将复杂字符串拆分为3个部分
我正在与measurement isntrument通信,它以单个字符串返回数据。输出如下所示: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
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);