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

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