PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gleitpunktzahl auf 7Segmentanzeige ausgeben



Daniel2412
23.09.2008, 20:56
Hallo.

Ich lasse mir auf 7Segmentanzeigen einen zuvor berechneten Wert ausgeben. Die auszugebende Zahl ist eine int Zahl und mit den bekannten Zeilen klappt das auch.
Wenn ich mir nun aber zusätzlich noch einen Nachkommastelle anzeigen lassen will geht es nicht mehr weil der Modulo Operator Ganzzahlen will. Hat jemand einen Idee wie ich mir eine Kommastelle ausgeben lassen kann?

Danke

int digit,digit1,digit10,digit100,wert;

digit = wert % 10u;
digit1 = mask(digit);
digit = (wert / 10u) % 10u;
digit10 = mask(digit);
digit = (wert / 100u) % 10u;
digit100 = mask(digit);

fhs
24.09.2008, 07:51
Hi,

leider habe ich meinen Beitrag von heute früh versehentlich kaputteditiert. Also noch einmal rekonstruiert:

Wenn Du viel Flash übrig hast, kannst die sprintf(..) oder dtostrf(..) benutzen.

Ansonsten erweitere einfach Dein jetziges Programm: Gehe bei den Nachkommestellen identisch vor. Wenn die float Variable negativ ist, gib vorher ein Minuszeichen aus und wandle sie in eine positive Zahl um. Subtrahiere von der positiven float Variablen zunächst ihren ganzzahligen Anteil und gib den aus. Multipliziere dann den verbliebenen Wert mit 10, so dass die erste Nachkommstelle zur Vorkommastelle wird. Usw.

Hier ein Beispiel für einen Wert f vom Typ float unter der Voraussetzung, dass 0<=f<1.0 (also der ganzzahlige Anteil schon subtrahiert ist):


float f= 0.1234567; // f>=0 && f<1.0 (hier nur ein Beispiel!)
unsigned char prec=6; // Anzahl der gewünscht. Stellen (<=9)
unsigned char string[10]; // String für Ausgabe: max. 9 Ziffern + '\x0'
unsigned char *p_string; // Zeiger
p_string=string;
while (prec--) {
unsigned char uchar;
f*=10.; // mal 10., erste Dezimalstelle rückt in Vorkommpos.
uchar=(unsigned char)((unsigned int)f); // extrahiere Vorkommap.
f-=(float)uchar; //
*p_string++=uchar+'0'; // in ASCII umwandeln und einfügen
};
*p_string=0; // String terminieren

Wenn Du von Anfang an weißt, dass Du n Nachkommastellen ausgeben willst, dann multipliziere einfach die Variable f (mit dem o.g. Wertebereich) mit 10**n, nimm den ganzzahligen Anteil und stecke den in Deine Funktion zur Anzeige von Integern -- die benötigt keine float Arithmetik und ist daher effizienter als mein Beispiel.

Gruß

Fred

Daniel2412
25.09.2008, 19:46
Hi

Danke für deine Antwort und den Stoß in die richtige Richtung. Dadurch war es dann ganz einfach.

Danke