3 бөліктен тұратын күрделі жолды сплитирлеу

Мен өлшеммен байланыссыз, ол бір жолда деректерді қайтарады. Шығару келесідей:

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

Міне, осы жолға қызығушылық танытқан бірінші және екінші бөлім. Бірінші бөлім Амперде Current, ал екіншісі TimeStamp (өлшеу уақыты).

Мен осы кодты қолданамын, бірақ ол жұмыс істемейді:

temp = result.Split(',');

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

Уақыт өте келе ағымдағы уақыт пен 0 үшін -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, көзі
Сіз қосарланған және өзгермелі түрде өзгерте аласыз, және бәрі жақсы болады
қосылды автор sll, көзі

Бірінші бөлімдегі Ампер бірлігін білмейді ...

сіз «-3.546714E-10A» -ді сүзуге тырысасыз.

Алдымен «A» өшіріңіз:

part[0].TrimEnd('A')

UPDATE:

Ғылымды сүзуге айналдыру сұрағын тексеріңіз талдау

Айтпақшы: float 7 таңбаның дәлдігін басқара алады (ол сіз толық пайдаланасыз). егер сіз дәлірек мәндерді алсаңыз, онда қосарланған (15-16 дәлдік)

2
қосылды
Мен бұл таңбаны ішкі жолмен алып тастауға тырыстым, бірақ ол маған көп санды береді. майиб өзгермелі нүктелер дұрыс оқылмайды?
қосылды автор Saeid Yazdani, көзі
Спасибо бұл жұмыс істейді, BTW бұл TrimEnd немесе TrimRight?
қосылды автор Saeid Yazdani, көзі
@ Sean87: TrimEnd (), TrimRight сияқты әдіс жоқ ()
қосылды автор sll, көзі
hmm dont білмеймін, мен қазір қолдарымның астында компиляторым жоқ ... бірақ осындай нәрсе :)
қосылды автор fixagon, көзі