Forum: Mikrocontroller und Digitale Elektronik Kommastelle einfügen bei sprintf Befehl


von Jens G. (Firma: fa. Seuffer) (willi-helmchen)


Lesenswert?

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??

von Werner (Gast)


Lesenswert?

Kann man das nicht so lösen?
spintf(Variable,"Ergebnis: %d.%d",i/1,i%1);

von michel (Gast)


Lesenswert?

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

von Florian M. (skywalker79)


Lesenswert?

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

von Johannes M. (johnny-m)


Lesenswert?

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.

von lkmiller (Gast)


Lesenswert?

>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);

von Florian M. (skywalker79)


Lesenswert?

Das mit den Kommastellen stimmt natürlich. da war ich vorhin etwas zu 
schnell mit dem Tippen.

von Jens G. (Firma: fa. Seuffer) (willi-helmchen)


Lesenswert?

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

von eProfi (Gast)


Lesenswert?

"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.

von Jens G. (Firma: fa. Seuffer) (willi-helmchen)


Lesenswert?

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

von Bobby (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.