Kommastelle einfügen bei sprintf Befehl

OP (Firma: fa. Seuffer) #920680
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??
Gast #920686
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
#920693
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.
Gast #920738
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);
Gast #920904
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.
Gast #920924
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);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren