Vorkommastellen einer Zahl bestimmen



  • Ich möchte die Anzahl der Vorkommastellen einer beliebigen Zahl bestimmen.

    Z. B.:
    120000.32 = 6 Vorkommastellen
    0.22 = 1 Vorkommastelle

    Dafür gibt es doch einen einfachen Algo, bevor ich aber das Rad neu erfinde, würde ich mich freuen, wenn ihn mir einer postet.

    Danke.



  • Hallo,

    ich kenne zwar keinen fertigen Algorithmus, aber folgendes habe ich mir gerade überlegt und sollte eigentlich funktionieren:

    int CountDigits(double number)
    {
    	return static_cast<int>(std::log10(std::abs(number))) + 1;
    }
    

    Am Anfang des Programms musst du dann noch folgendes einfügen:

    #include <cmath>
    

    Gruß,
    Sven



  • Danke,
    auf dem VC läuft es (auf dem Builder nicht).



  • Hallo,

    sdkfjhdsf schrieb:

    Danke,
    auf dem VC läuft es (auf dem Builder nicht).

    Ich habe nur den VC zum Testen, daher: was genau heißt, es funktioniert nicht? Gibt es eine Compiler-Fehlermeldung oder wird einfach ein falsches Ergebnis berechnet?

    Frage an die Profis: Müsste dieser Code nicht eigentlich problemlos portabel sein?

    Gruß,
    Sven



  • auf meinem buidler(6.0 update 4) läuft es absolut fehlerfrei



  • Auf dem Builder (5.0, Update Pack 1) läuft es auch, bis auf Werte, die eine Null als Vorkommastelle haben. Bei 0.3 etwa gibts einen log10: SING error.
    Der VC gibt korrekt eine 1 aus.

    Gruß



  • Hallo,

    ich habe noch etwas experimentiert und festgestellt, dass diese Funktion auch beim VC z.B. bei der Zahl 0.0123 nicht richtig funktioniert (falsches Ergebnis). Mit folgender Änderung funktioniert es nun hoffentlich (auch beim Builder 5 mit allen Zahlen?):

    int CountDigits(double number)
    {
    	if ( static_cast<int>(std::abs(number)) == 0 )
    		return 1;
    	else
    		return static_cast<int>(std::log10(std::abs(number))) + 1;
    }
    

    Gruß,
    Sven



  • 👍


Anmelden zum Antworten