Hy Leute, ich hab mal eine frage. Ich nutze die sprintf version um eine Integer Zahl in Dezimal zu wandeln und diese in einem Char Array abzulegen um diese dann in einem LCD anzeigen zu lassen. Mein Code hierfür lautet int i = 0x3168 //ist im richtigen Code natürlich ein Ergebnis char Variable[16]; spintf(Variable,"Ergebnis: %d",i); pts_lcd((char*) &Winkel[0], sizeof[Winkel)-1); //Ausgabe auf LCD, Ergebnis: 12648 Das geht soweit alles ganz gut. Jetzt hab ich nur das Problem das die 2 hinteren Stellen meiner Integer Zahl die Komastellen darstellen und ich einen Trennpunkt brauche, also auf dem Display folgendes kommt. Ergebnis: 126.48 gibt es hierfür eine einfache Möglichkeit mit der sprintf Funktion oder wird das eine größere Aufgabe??
Kann man das nicht so lösen? spintf(Variable,"Ergebnis: %d.%d",i/1,i%1);
Ergebnis zwischenspeichern durch 100 teilen, dann wieder mit 100 multipliziern, dadurch werden die letzten beiden Werte zu 0. Zieh von der größeren Zahl die kleinere ab und du hast deine Nachkommastellen, die wieder zwischenspeichern dann teile wieder deine ursprüngliche zahl durch 100. jetzt hast du in einer variablen die Zahlen vor dem Komma und in der andren die Hachkommastellen. hoffe das war halbwegs verständlich
Guten morgen, du könntest mal versuchen sprintf(Variable,"Ergebnis %3.2f",i); das wären dann drei Stellen vorm Komma und zwei Stellen nach dem Komma. Gruß Florian
Florian M. wrote: > sprintf(Variable,"Ergebnis %3.2f",i); > > das wären dann drei Stellen vorm Komma und zwei Stellen nach dem Komma. Nö. Da die Variable i ein int ist, gibt es da keine Nachkommastellen, auch wenn Du sie als float ausgibst! Die Variante von Werner hingegen müsste funktionieren, wenn er anstatt "/1" und "%1" jeweils "/100" bzw. "%100" geschrieben hätte. Abgesehen davon ist sprintf kein Befehl (Befehle gibt es in C nicht), sondern eine (Bibliotheks-) Funktion.
>sprintf(Variable,"Ergebnis %3.2f",i); >das wären dann drei Stellen vorm Komma und zwei Stellen nach dem Komma. Nein, mindestens 3 Stellen, davon 2 nach dem Komma. >Da die Variable i ein int ist, gibt es da keine >Nachkommastellen, auch wenn Du sie als float ausgibst! Dann müssen eben erst mal Nachkommastellen erzeugt werden: sprintf(Variable,"Ergebnis %3.2f",(float)i/100);
Das mit den Kommastellen stimmt natürlich. da war ich vorhin etwas zu schnell mit dem Tippen.
Hey danke für die schnelle Hilfe, die Varante von Werner funktioniert wenn ich die Korrektur von Johannes M. einbaue. Jetzt muss ich der kommastelle nur noch sagen das sie das minuszeichen weglässt dann funktioniert es 1A
"Kann man das nicht so lösen? spintf(Variable,"Ergebnis: %d.%d",i/1,i%1); " Wie wäre es mit spintf(Variable,"Ergebnis: %d.%02d",i/100,i%100); ansonsten kann es sein, dass 12.03 als 12.3 ausgegeben wird. Wenn es auf Zeit oder Speicherplatz ankommt, gibt es wesentlich elegantere Methoden.
Auf zeit und Speicher kommt es hierbei in erster Linie nicht an, da die Umrechnung und Ausgabe auf dem Display über kurz oder lang einer CanBus anbindung weichen muss. Es dient im Moment lediglich der Kontrolle
Wenn es auf Speicher und Rechenzeit nicht ankommt versuch es mal so:
1 | int i = 0x3168 //ist im richtigen Code natürlich ein Ergebnis |
2 | char Variable[16]; |
3 | |
4 | float h; |
5 | |
6 | h=i; |
7 | |
8 | sprintf(Variable,"Ergebnis: %5.2f",h); |
9 | pts_lcd((char*) &Winkel[0], sizeof[Winkel)-1); |
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.