複雑な文字列を3つの部分に分割する

私は計測機器と通信しており、データを単一の文字列で返します。出力は次のようになります。

string result = "-3.546714E-10A,+0.000000E+00,+5.120000E+02\n";

ですから、この文字列に興味を持っているのは第1と第2の部分です。最初の部分はアンペアで電流、2番目はタイムスタンプ(測定時間)です。

私はこのコードを試していますが、動作しません:

temp = result.Split(',');

tipair = new Results.TIPair();
tipair.Current = float.Parse(temp[0]);
tipair.Time = float.Parse(temp[1]);

理想的には、現時点では -3.546714E-10 であり、時刻(

UPDATE: I tried to do like below but I get very bad numbers (much bigger than they should be!)

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]);
1
10A は10Amperのような貴重な部分ですか?
追加された 著者 sll,

2 答え

Double.Parse()と有効な番号スタイル

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列挙型

AllowExponent 数字列が指数表記であることを示します。 AllowExponentフラグは、解析された文字列   "E"または "e"文字で始まる指数を含む   そのあとにオプションの正または負の符号と   整数。つまり、フォーム内の文字列を正常に解析します。   nnnExx、nnnE + xx、およびnnnE-xx。小数点記号または   仮数部または仮数部にサインインする。これらの要素を   パースされる文字列、AllowDecimalPointとAllowLeadingSignを使用する   これらの個々のフラグを含む複合スタイルを使用してください。

3
追加された
詳細をありがとう。それは本当にダブルですか?後でビットマップに描画したいので、私は浮動小数点でのみ動作するPointFに限定されていると思いますか?
追加された 著者 Saeid Yazdani,
doubleをfloatに変更すると、すべてが細かく解析されます
追加された 著者 sll,

それは最初の部分でアンペールの団結を知っていない...

フロートするために "-3.546714E-10A"を解析しようとします。

最初に "A"をカットしてください:

part[0].TrimEnd('A')

更新:

科学を浮かべるように科学を変換する解析する

ちなみに:浮動小数点7文字(完全に使用している)の精度を処理することができます。より正確な値を取得する場合は、double(15〜16精度)

2
追加された
私は部分文字列でその文字を削除しようとしましたが、それは私に大きな数字を与えます。浮動小数点は正しく読み取られませんか?
追加された 著者 Saeid Yazdani,
ありがとう、それはTrimEndかTrimRightですか?
追加された 著者 Saeid Yazdani,
@ Sean87:TrimEnd()、TrimRight()のようなメソッドはありません。
追加された 著者 sll,
うーん、私の手の下にコンパイラを置いてはいけません。
追加された 著者 fixagon,