Ich komme hier leider mit einer Formatierung nicht weiter.
Tante Google und dieses hiesige Forum habe ich schon durchsucht, jedoch zu keinem Ergenbis gekommen.
Programmierkenntnisse sind rudimentär vorhanden. Anbei mein Beispielsketch, wo man mein Problem erkennen kann:
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
unsigned long Trip = 1123290000; //Zurückgelegte Strecke in mm
char buf[500];
char buf2[500];
int Tageshunderter;
Tageshunderter = (Trip/100000)%10;
sprintf(buf, "%i.", Trip/1000000); // Ausgabe in km mit anschließendem Punkt
sprintf(buf2, "%i.%i", Trip/1000000, (Trip/100000)%10); // Gibt als Nachkommastelle eine Null
Serial.println("Tageshunderter:");Serial.println(Tageshunderter);
Serial.println("Puffer1:");Serial.println(buf);
Serial.println("Puffer2:");Serial.println(buf2);
}
void loop() {
// put your main code here, to run repeatedly:
}
Warum ich im Puffer2 immer eine Null als Nachkommastelle bekomme verstehe ich nicht.
Sicherlich korrektes Verhalten, ich vertsehe es aber nicht und benötige dort die "Tageshunderter".
Für Sachdienliche Hinweise oder gar eine Lösung bin ich sehr dankbar.
schalte alle Warnungen ein. Datei > Voreinstellungen > Compiler-Warnungen "ALLE".
Dann sieht man eher wo es klemmt. Hier demnach die Datentypen.
Ich habs mal geändert.
void setup() {
Serial.begin(9600);
unsigned long Trip = 1123290000; //Zurückgelegte Strecke in mm
char buf[40];
char buf2[40];
int Tageshunderter;
Tageshunderter = (Trip/100000)%10;
int km = (Trip/1000000);
sprintf(buf, "%d.", km); // Ausgabe in km mit anschließendem Punkt
sprintf(buf2, "%d.%d", km, Tageshunderter); // Gibt als Nachkommastelle eine Null
Serial.print("Tageshunderter: ");Serial.println(Tageshunderter);
Serial.print("Puffer1: ");Serial.println(buf);
Serial.print("Puffer2: ");Serial.println(buf2);
}
void loop() {
}
keine Sorge, darüber bin ich auch gestolpert und viele andere sicherlich auch.
Noch eine kleine Änderungen, damit alles unsigned konform ist.
void setup() {
Serial.begin(9600);
unsigned long Trip = 1123290000; //Zurückgelegte Strecke in mm
char buf[40];
char buf2[40];
unsigned int Tageshunderter;
Tageshunderter = (Trip/100000)%10;
unsigned int km = (Trip/1000000);
sprintf(buf, "%u.", km); // Ausgabe in km mit anschließendem Punkt
sprintf(buf2, "%u.%u", km, Tageshunderter); // Gibt als Nachkommastelle eine Null
Serial.print("Tageshunderter: ");Serial.println(Tageshunderter);
Serial.print("Puffer1: ");Serial.println(buf);
Serial.print("Puffer2: ");Serial.println(buf2);
}
void loop() {
}
Schau dir mal das Format %03u an. Das ist evtl was für dich:
unsigned long trip = 1123290000; //Zurückgelegte Strecke in mm
unsigned int km = trip/1000000;
unsigned int m = (trip/1000)%1000;
sprintf(buf, "%u,%03u km", km, m); // 1123,290 (geht auch mit führenden Nullen ( 0,001 )
ich bin da vor einiger Zeit schon mal drüber gestolpert, aber mit zunehmendem Alter wird man sicher vergesslicher
Auf einem ESP hab ich die Funktion snprintf mit der option f für float Werte im Einsatz klappt also ohne Probleme auf dem Ding. Heute wollte ich nach längerer Zeit das mal wieder auf einem UNO machen, und hab dann eine eine gefühlte Ewigkeit am Syntax rumgesucht. Bis mir dann irgendwann wieder das Licht aufging. Es geht einfach nicht !!!.
Gibts da eigendlich einen sinvollen Grund zu ? oder wurde das einfach nur vergessen, warum dann nicht längst mal mit aufgenommen .
Rentner:
Gibts da eigendlich einen sinvollen Grund zu ?
Speichermangel. Der Float-Teil würde ca. 1,5kB belegen auch wenn man ihn gar nicht benutzt. Deshalb gibt es auf AVRs die nicht-Standard Funktion dtostrf() dafür