Fließkommazahlen nach ASCII



  • Servus,

    mit dem nachstehenden Code kann eine Fließkommazahl nach ASCII umgewandelt werden, leider nur mit einer Stelle nach dem Komma. Ist es möglich, diesen zu erweitern sodaß zwei Stellen geschafft werden? Die Zeichen sind in TL und VL vorhanden.

    char VoltageHB, VoltageLB, Temp, TL, VL;
    float V_ADC = 4.5;
    
    VoltageHB = (char)V_ADC;              // Store the high-byte
    
    V_ADC = ( V_ADC - VoltageHB );
    VoltageLB = (char)( V_ADC * 100 );    // Store the low-byte
    
    Temp = CHAR2BCD2(VoltageHB);    // Convert from char to bin
    
    TL = (Temp & 0x0F) + '0';
    
    Temp = CHAR2BCD2(VoltageLB);    // Convert from char to bin
    
    VL = (Temp >> 4) + '0';  
    
    char CHAR2BCD2(char input)
    {
        char high = 0;
    
        while (input >= 10)                 // Count tens
        {
            high++;
            input -= 10;
        }
    
        return  (high << 4) | input;        // Add ones and return answer
    }
    

    Gruss
    Campus



  • Das CHAR2BCD2 liefert Werte zwischen 0 und 99 (also) 2 Stellen zurück.

    Nur wird jeweils nur 1 Stelle ausgewertet.
    Bei TL die Einerstelle und bei VL die Zehnerstelle.
    Du willst bei VL noch die Einerstelle haben.
    (jetzt solltest du das selber lösen können)

    Wo findet man eigentlich solchen Code?



  • Schau dir mal floor() und ceil() an.



  • DirkB schrieb:

    Wo findet man eigentlich solchen Code?

    Gute Frage! Warum einfach, wenn es auch kompliziert geht? 😕
    Vorschlag aus alten C-Zeiten: sprintf(buffer,format,value) oder die Funktion dtoa() herunterladen von http://berniebutt.npage.de


Anmelden zum Antworten