Kommastelle einfügen bei sprintf Befehl

OP (Firma: fa. Seuffer) #920680
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
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
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
>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);
OP (Firma: fa. Seuffer)
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
Gast
"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
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.