String to Float

twtimew

Grünschnabel
Hallo,
Ich hab folgendes Problem
Ich hab einen String in der Form
AC_000.1 V
Ich will nun nur die Zahl 000.1 herauskopieren und in eine float Zahl
umwandeln, um damit Rechnen zu können.
Wie kann ich nun die Zahl heraukopieren
und in eine float Zahl umwandeln.

Danke schonmal

Julian
 
Wenn diese Strings alle gleich aufgebaut sind, kannst du mit dem 3. Feldelement beginnend, den Teil der dich interessiert, in einen anderen String kopieren. Den String kannst du dann mit "float (oder double) = atof( string )" von einem string in einen floatwert konvertieren

s[3]=0
s[4]=0
s[5]=0
s[6]=.
s[7]=1

Den Teil kopierst du einfach per for Anweisung in einen anderen String und konvertierst diesen wie im folgenden Beispiel aus dem MSDN

Example

#include <stdlib.h>
#include <stdio.h>

void main( void )
{
char *s; double x; int i; long l;

s = " -2309.12E-15"; /* Test of atof */
x = atof( s );
printf( "atof test: ASCII string: %s\tfloat: %e\n", s, x );

s = "7.8912654773d210"; /* Test of atof */
x = atof( s );
printf( "atof test: ASCII string: %s\tfloat: %e\n", s, x );


}

Output

atof test: ASCII string: -2309.12E-15 float: -2.309120e-012
atof test: ASCII string: 7.8912654773d210 float: 7.891265e+210

Viel Erfolg
 
Du könntest aus dem String alles, was nicht zur Float-Zahl gehört herausnehmen und mit dem Befehl
" atof (const char *string) " in eine Gleitkommazahl konvertieren. Rückgabewert ist allerdings ein double.
Du mußt aber die math.h includen.

MfG Matthias
 
Ah ok danke erstmal

Ich hab noch ein Problem mit meiner ListBox
und zwar will ich aus ihr einzelne Werte rauskopieren.
Wie kann ich dabei Vorgehen?
Ich arbeite mit den CBuilder 6
 
Code:
char* OldBuffer = "AC_000.1 V";

entweder Du machst:
Code:
memcpy(NewBuffer, OldBuffer, 5)

wenn du weißt dass die Zahlen immer 5 Zeichen lang sind.

oder Du suchst nach '_' und liest alle Zeichen bis ' ' ein:
Code:
int position = memchr(OldBuffer, '_', 1);
while(OldBuffer[position+1] != " ")
{
NewBuffer[i] = OldBuffer[position+i];
i++;
}

int Number = atoi(NewBuffer);

müsste ungefähr so funktionieren, habs nicht ausprobiert.
 
Hier mal ein stück aus den quell code

String Zeile;
char c;
while ( ComPort2->InputCount() > 0) { wenn in speicher was drin ist

c = ComPort2->ReadChar(); //liest Wert aus den speicher
Zeile = Zeile + c; //fügt in den String hinzu
}
Zeile = Zeile.SubString(4,6); //holt die Zahlen aus den String

StrToFloat(Zeile); // funktiniert nicht

Sobald ich den String umwandeln will kommt eine Fehler Meldung
obwohl nur Zahlen in den String stehen.
gibt es noch andere Möglichkeiten?
 
Zurück