将一个复杂的字符串分成 3 个部分

Posted

技术标签:

【中文标题】将一个复杂的字符串分成 3 个部分【英文标题】:splliting a complex string in 3 parts 【发布时间】:2011-10-28 08:48:52 【问题描述】:

我正在与测量仪器通信,它以单个字符串的形式返回数据。输出如下:

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

【问题讨论】:

10A 是像 10Amper 这样有价值的部分吗? 【参考方案1】:

您可以使用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 标志,或使用包含这些单独标志的复合样式。

【讨论】:

感谢您的详细信息。真的应该是DOUBLE吗?因为后来我想在位图上绘制它们,我认为我仅限于 PointF,它只适用于浮点数?? 您可以将 double 更改为 float 并且所有内容都可以正常解析【参考方案2】:

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

您尝试将“-3.546714E-10A”解析为浮动。

你应该先把“A”去掉:

part[0].TrimEnd('A')

更新:

检查Convert scientific to float 科学解析问题

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

【讨论】:

我试图通过子字符串删除该字符,但它给了我一个 biggg 数字。 mayeb 浮点数读取不正确? 嗯不知道,我现在手头没有编译器......但是类似的东西:) @Sean87 : TrimEnd(),没有像 TrimRight() 这样的方法

以上是关于将一个复杂的字符串分成 3 个部分的主要内容,如果未能解决你的问题,请参考以下文章

表示数值的字符串

CSS 将一个页面平均分成四个部分(div)

Xcode11中用Objective-C将UITableView分成几个部分

如何使用 flexbox 将网页分成四个部分?

65. 有效数字

将一个整数除为 k 个部分