Go Down

Topic: float und int zu String Variable? (Read 1 time) previous topic - next topic

Hallo, kann mir jemand sagen wie ich den Wert aus einer float Variable und einer int Variable in eine String-Variable zusammensetzen kann?

Danke

michael_x

Es ist hart für einen WebApps-Programmierer, aber String ist nichts für einen Arduino.

Den knappen RAM hast du mit char text[MAXSIZE]; besser im Griff;

Wenn du den Text nicht an ein Objekt übergibst, das print unterstützt { Serial.print(myfloat); Serial.print(" - "); Serial.println(myInt); } 
dann ist dtostrf und itoa , was du suchst.

Beide hängen eine binär 0 an den Text, die du (als poor man's concatenate) danach ausbügeln musst.

Code: [Select]
float myFloat=123.4567;
unsigned int myInt = 987;
//                      0123456789012345
static char buffer[] = "F: ###.## I: ###"; // 17 bytes sample text to overwrite

dtostrf(myFloat, 6, 2, &buffer[3]);
if (myInt < 1000)   // check if myInt fits !
   itoa(myInt,&buffer[13],10);   // 10 = decimal
buffer[9] = ' '; // concatenate both parts again

http://dereenigne.org/arduino/arduino-float-to-string

jurs


Hallo, kann mir jemand sagen wie ich den Wert aus einer float Variable und einer int Variable in eine String-Variable zusammensetzen kann?


In eine Stringvariable vom Typ "char-Array" oder in eine Stringvariable vom Typ "String-Objekt"?

Ich gehe mal vom Standard aus, also char-Array, da nützen Dir Funktionen aus der Standardbibliothek.

Integer in String:
itoa() ==> http://www.cplusplus.com/reference/cstdlib/itoa/

Float (unter Arduino ist "float" ein "double") in String:
dtostrf() ==> http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga060c998e77fb5fc0d3168b3ce8771d42

Allgemeine Formatierung mit gemischten Variablen:
sprintf() ==> http://www.cplusplus.com/reference/cstdio/sprintf/

Leider funktioniert die sprintf-Funktion unter Arduino NICHT mit float/double Fließkommazahlen. Man könnte sich behelfen, eine Fließkommazahl erst mit dtostrf in ein char-Array zu packen und danach noch mit sprintf als String auszugeben.

  double f=3.14159;
  int i=3;
  char fstr[10];
  char myOutput[40];
  dtostrf(f, 5, 2, fstr);
  sprintf(myOutput,"Pi ist %s, also gerundet %d",fstr,i);
  Serial.println(myOutput);

Im allgemeinen solltest Du aber prüfen, ob Dein Programm überhaupt Fließkommazahlen benötigt. Der Verzicht auf Fließkommazahlen hält das Programm klein, da Integer-Arithmetik weniger großen Code erfordert als Fließkomma-Arithmetik.

Beispiel: Du benötigst Temperaturen auf Hundertstel Grad genau, dann kannst Du definieren
float T=23.51;
Oder Du rechnest alle Temperaturen im Programm gleich als Integer in Hundertstel Grad und definierst:
int T=2351;

Sowas ließe sich bei Bedarf mit sprintf() wesentlich eleganter mit zwei Nachkommazahlen ausgeben als eine tatsächliche Fließkommazahl, die von Arduino bei der sprintf()-Funktion nicht unterstützt wird.






Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy