Gast
#2020579
Hallo, ich will eine 8 Bit Variable als Festkommazahl auf einem LCD Display anzeigen lassen. Aber wie krieg ich das Komma an die richtige Stelle? mfg piet
|
Anzeige
|
Festkommazahl
Gast
#2020579
Hallo, ich will eine 8 Bit Variable als Festkommazahl auf einem LCD Display anzeigen lassen. Aber wie krieg ich das Komma an die richtige Stelle? mfg piet zb indem du dir Vorkomma und Nachkommaanteil getrennt in Textform erzeugen lässt. Vorkomma ausgeben ',' ausgeben Nachkomma ausgeben zb
Gast
#2020681
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. df1as schrieb: > 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: Äh. Danke für die Korrektur. Da war ich wohl etwas abgelenkt
Gast
#2020691
Und noch ein Beispiel mit einer Nachkommastelle: unsigned int u = 196; sprintf (aucTemp, "%u,%u", u/10 , u%10); // 19,6. Siehe Festkommaarithmetik.
Gast
#2020834
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
#2020847
Piet schrieb: > wie muss ich die Variable jetzt deklarieren, dass ich in denn Bereich > 0,00 - 35,00 komme? Wenn du schnell rechnen können willst: 6 Bit vor'm Komma, zwei danach. Geht dann halt bis 63, und verschenkt so Auflösung. Alternative: Div/Mod 36.
Gast
#2020856
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
Gast
#2020858
unsigned char ucWert = 174;
printf ("%u,%u", ucWert/5, (ucWert%5) * 2); // 34,8
Hatte mich vertippt.
Gast
#2020906
Hallo, vielen Dank hatt wunderbar geklappt. mfg piet Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|