Festkommazahl

#2020585
Lesenswert?
• ▲
▼
zb indem du dir Vorkomma und Nachkommaanteil getrennt in Textform 
erzeugen lässt.
Vorkomma ausgeben
',' ausgeben
Nachkomma ausgeben

zb
1
  uint8_t  i;     // Format: 2 Nachkommabits
2
                  //   Zahl ist also das 4-fache der richtigen Zahl
3
                  // 4.5  wird also als 18 gespeichert
4
  char Buffer[10];
5

6
  i = 18;
7
  sprintf( Buffer, "%d,%02d", i / 4 , i % 4 );      // Ausgabe ist dann "4,50"
8
  lcd_puts( Buffer );
Gast #2020681
Lesenswert?
• ▲
▼
Ansatz ist ok, das Beispiel stimmt aber nicht ganz. Wenn du zwei 
Nachkommastellen ausgeben willst, musst du schon die Zahl um 100 größer 
führen und dann i/100 und i%100 ausgeben. Oder, wenn es Schrittweite 1/4 
= 0,25 sein soll, muss man den mod-4-Anteil noch mit 25 multiplizieren:

unsigned int u = 19;
sprintf (aucTemp, "%u,%02u", u/4 , (u%4) * 25);  // 4.75

oder

unsigned int u = 476;
sprintf (aucTemp, "%u,%02u", u/100 , u%100);  // 4.76

(Passt aber so nur von 0,00 bis 2,55 in 8 Bit!)

Bei vorzeichenbehafteten Zahlen ist, insbesondere mit der %-Operation, 
besondere Vorsicht geboten. Ich benutze beim print() immer lieber %u, 
wenn es ohne Vorzeichen sein soll.
Gast #2020834
Lesenswert?
• ▲
▼
Hallo,

erstmal danke für die Antworten.


> unsigned int u = 476;
> sprintf (aucTemp, "%u,%02u", u/100 , u%100);  // 4.76

> (Passt aber so nur von 0,00 bis 2,55 in 8 Bit!)

schon ausprobiert, klappt gut.

wie muss ich die Variable jetzt deklarieren, dass ich in denn Bereich 
0,00 - 35,00 komme?

mfg piet
Gast #2020856
Lesenswert?
• ▲
▼
Hast du denn mehr als 8 Bit zur Verfügung?

Sonst z. B. eine 16-Bit-Variable, "uint16_t" oder ähnlich. Hängt vom 
Compiler ab. Ich nehme für 16 Bit "unsigned short".

3500 muss hineinpassen, wenn du Hundertstel anzeigen willst.

unsigned short usWert = 3499;
printf ("%u,%02u", usWert/100, usWert%100);  // 34,99

Wenn es doch nur 8 Bit sind, kannst du mit der Einheit 1/5 rechnen:

unsigned char ucWert = 174;
printf ("%u,%u", usWert/5, (usWert%5) * 2);  // 34,8

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.