ich die ausgezeichnete Antwort in den Kommentaren sehen fehlt (oder ich habe es nicht dort finden leicht) eine andere Möglichkeit, wie sie damit umgehen.
Sie sollten geschrieben haben, warum Sie Gleitkommazahl benötigen. Wenn Sie zufällig mit monetären Beträgen arbeiten (und nicht zu großen), können Sie einen benutzerdefinierten Parser für Eingabewerte und einen benutzerdefinierten Formatierer für die Ausgabe von Werten erstellen, um ihn als 64-Bit-Integer (* 100) zu lesen und in Ihrem Ganzen zu arbeiten Anwendung mit 100 * Betragswerten. Wenn Sie mit sehr großen Mengen arbeiten, verwenden Sie eine Bibliothek für große Zahlen, oder Sie können Ihre eigenen mit char * Zahlen arbeiten.
Es ist ein Spezialfall von Fixed-point arithmetic.
Wenn Sie daran interessiert sind, "nur um das zu lösen", ohne zu viel zu programmieren, gehen Sie trotzdem zur großen Zahlenbibliothek, selbst die * 100-Festkomma-Variante ist einfach mit Fehlern zu schreiben - wenn Sie das erste Mal sind haben nicht genügend Ressourcen, um es richtig zu machen (TDD empfohlen).
Aber unbedingt lernen, wie die Zahlen im Computer gespeichert sind, und warum float/double nicht alle Zahlen darstellen kann. Float 2.1
für Computer (Basis 2 intern verwendet) ist vergleichbar mit Mensch 1/3
, die nicht in der Basis 10 ohne unendliche Anzahl von Dezimalstellen dargestellt werden kann (und wie 1.0
== 0.99999...
in Basis 10). (Danke @ tobi303)
Nach dem neuen Kommentar zu lesen, wenn „Hat dies keinen großen Einfluss auf Finanzanwendungen haben?“
Antwort: Nein, Null Auswirkungen, niemand vernünftig (und professionell) würde finanzielle Anwendung mit Floats oder Doubles erstellen.
Nicht alle Werte sind genau darstellbar. Siehe auch: http://stackoverflow.com/questions/588004/is-floating-point-math-broken – NathanOliver
Gleitkomma! = Real. Willkommen in der Binärdatei. Siehe Link von @ NathanOliver. – davidbak
Nur eine kleine Korrektur zu Ihrer Frage. Ihr Ergebnis ist einwandfrei und korrekt. Ihre Annahmen und Erwartungen sind ungültig. – Ped7g