Umrechnung einer Fließkommazahl in eine Ganzzahl



  • Hallo!

    Ich habe folgendes Problem:

    Ich möchte eine Fließkommazahl in eine Ganzzahl umrechnen, um anschließend mit der Ganzzahl weiterzurechnen.

    int _ganzzahl:
    double fließkommazahl;

    int _ganzzahl = (int) (fließkommazahl * 10);

    Die fließkommazahl hat immer nur eine Mantisse mit einer Nachkommazahl, also z.b. 2,7 .

    Die Umrechnung wäre z.b. von der fließkommazahl 2,7 in die ganzzahl 27.

    Das ganze funktioniert auch wunderbar, AUßER bei der fließkommazahl mit einer Nachkommastelle von ,3 .

    Wenn ich für die fließkommazahl bspw. eine 3.3 eingebe, wird diese in eine Ganzzahl 32 umgerechnet.

    Wieso? 🙄

    DANKE!


  • Mod

    3.3 ist im Binärsystem ein periodischer Dezimalbruch Binärbruch, so wie es z.B. 1/3 im Dezimalsystem (0.3333....) irgendwo ganz weit hinten muss diese Zahl abgeschnitten werden und man bekommt etwas wie z.B. 32.999999999999999998. Und das ist bei der Umwandlung von Fließkomma in Ganzzahl ( ⚠ dein Cast ist dafür übrigens vollkommen unnötig!) eine 32, da einfach die Nachkommastellen abgeschnitten werden. Daher runde die Zahl, anstatt durch die implizite Umwandlung die Nachkommastellen abzuscheiden. Für positive Zahlen kannst du beispielsweise einfach 0.5 addieren und dann die Nachkommastellen abschneiden und erhältst das gewünschte Ergebnis. Also kurz gesagt:

    int ganzzahl = (fließkommazahl * 10) + 0.5;
    

    Und lass Variablennamen mit Unterstrich am Anfang sein! Das ist eines der wenigen Arten und Weisen, wie man seine Variablen nicht nennen sollte, da diese Bezeichner reserviert sind. Wieso bringen so viele Lehrer diese doofe Namensgebung bei?



  • Vielen Dank!!!!



  • SeppJ schrieb:

    da diese Bezeichner reserviert sind.

    Stimmt so nicht. Bezeichner beginnend mit einem Underscore und einem Großbuchstaben oder einem weiteren Underscore sind reserviert. Bezeichner mit einem einzigen Underscore nur im globalen Namespace.


  • Mod

    314159265358979 schrieb:

    Stimmt so nicht. Bezeichner beginnend mit einem Underscore und einem Großbuchstaben oder einem weiteren Underscore sind reserviert. Bezeichner mit einem einzigen Underscore nur im globalen Namespace.

    Wieviel wettest du, dass seine Variablen im globalen Namensraum auch mit Unterstrich anfangen?



  • Hm, auch wieder wahr. 🤡


Anmelden zum Antworten