Hallo! Ich bekomme von einem Messgerät per RS232 z.B. den String "-1.25010000E-05" und muss diesen nun als 'lesbaren' Wert auf ein Display bringen. Im obrigen Beispiel wäre dies z.B. "0.000", da die Zahl (gemessene Spannung) vernachlässigbar klein ist. Wie könnte ich sowas realisieren? Meine Idee: 1. Stringende mit \0 kennzeichnen 2. String mittels strtol() in ein double verwandeln 3. Das double mittels sprintf in eine formatierte ASCII-Ausgabe bringen 4. Wert ausgeben Würde das funktionieren? Wie müsste die sprintf-Bezeichner lauten? Würde das ganze weniger Speicherintensiv auch gehen? Bin für Tipps dankbar! Gruß, Techniker
strtol konvertiert in long integer. Besser ist wohl strtod oder atof. printf("%.3f", wert); gibt "wert" mit drei Nachkommastellen aus.
Ich habe gerade folgendes ausprobiert: double val; unsigned char test[64]; val = 1.2552; sprintf(test,"% .3f\r\n",val); uart_puts(test); Als Ergebnis erhalte ich am PC: '?<CR><NL>' Was hat dieses Fragezeichen zu bedeuten? :-/
Das bedeutet, daß Du nicht mit der floating-point-printf-Library gelinkt hast.
:) Klär mich bitte mal auf, wie ich das mache.. ;) (hab avr-gcc 3.4.3)
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html#ga1 Im Standard WinAVR Makefile müsste das schon vorbereitet sein unter Additional libraries. So einkommentieren sollte gehen: # Floating point printf version (requires -lm below) LDFLAGS += -Wl,-u,vfprintf -lprintf_flt # -lm = math library HERE LDFLAGS += -lm
Wie wär's denn, wenn du anhand des Exponenten das Komma der Basis so verschiebst, dass der Exponent durch 3 teilbar ist und die Basis >0 und <1000 ist? Dann kannst du die Ziffernfolge der Basis ohne Rechnerei übernehmen (mit verschobenem Dezimalkomma) und anhand des Exponenten einen Einheiten-Vorsatz auswählen. ...
>> sprintf(test,"% .3f\r\n",val);
Das Leerzeichen im Format-String muss raus!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.