- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 3 von 3

Thema: Gleitpunktzahl auf 7Segmentanzeige ausgeben

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    19.09.2008
    Beiträge
    19

    Gleitpunktzahl auf 7Segmentanzeige ausgeben

    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
    Code:
    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);

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    70
    Beiträge
    622
    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):
    Code:
    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
    Only entropy comes easy. - Anton Checkhov

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    19.09.2008
    Beiträge
    19
    Hi

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

    Danke

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress