我正在与测量isntrument进行通信,它以单个字符串返回数据。输出如下:
string result = "-3.546714E-10A,+0.000000E+00,+5.120000E+02\n";
所以我对这个字符串感兴趣的是第一和第二部分。第一部分是安培的电流,第二部分是TimeStamp(测量时间)。
我正在尝试此代码,但它不起作用:
temp = result.Split(',');
tipair = new Results.TIPair();
tipair.Current = float.Parse(temp[0]);
tipair.Time = float.Parse(temp[1]);
理想情况下,我希望-3.546714E-10
为当前时间0
为时间(时间为任意正数)。
更新:我试着像下面这样做,但是我的数字非常糟糕(比它们应该大得多!)
temp = result.Split(',');
tipair = new Results.TIPair();
tipair.Current = float.Parse(temp[0].Substring(0, temp[0].Length - 1));
tipair.Time = float.Parse(temp[1]);
答案 0 :(得分:3)
您可以使用Double.Parse()和有效Number Styles解析当前内容:
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);
MSDN,NumberStyles Enumeration:
AllowExponent 表示数字字符串可以是指数表示法。 AllowExponent标志允许解析的字符串 包含以“E”或“e”字符开头的指数 然后是可选的正面或负面的标志和 整数。换句话说,它成功解析了表单中的字符串 nnnExx,nnnE + xx和nnnE-xx。它不允许使用小数分隔符或 登录有效数字或尾数;允许这些元素 要解析的字符串,请使用AllowDecimalPoint和AllowLeadingSign 标记,或使用包含这些单独标记的复合样式。
答案 1 :(得分:2)
它不知道第一部分的安培统一性......
你试图解析“-3.546714E-10A”浮动。
你应首先用以下方式剪掉“A”:
part[0].TrimEnd('A')
更新:
检查Convert scientific to float问题以获取科学解析
顺便说一句:float可以处理7个字符的精度(你完全使用它)。如果你得到更准确的值,你应该使用double(15-16精度)