From: Moritz Bunkus Date: Tue, 30 Sep 2014 15:46:31 +0000 (+0200) Subject: Form::round_amount: Perls Wissen über Stringifizierung nutzen X-Git-Tag: release-3.2.0beta~299^2 X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/commitdiff_plain/ed531c37b5bfda999e40904fe5b7fb248ad9e3a3?ds=inline;hp=ed531c37b5bfda999e40904fe5b7fb248ad9e3a3 Form::round_amount: Perls Wissen über Stringifizierung nutzen Perl weiß am besten, wann eine nicht ganz exakte Fließkommazahl eigentlich eine für Menschen sinnvoll lesbare Fließkommazahl ist (also dass mit 143.19999999999998863132 eigentlich 143.2 gemeint ist, wenn ich 143.2 übergebe). Also nutzen wir diese Tatsache, machen aus der Fließkommazahl einen String und teilen diesen dann am Dezimaltrennzeichen auf. Danach kann mit Integerarithmetik weiter gerechnet werden. Auf die Nachkommastellen wird entsprechend addiert, sofern die relevante Stelle >= 5 ist, und der dabei potenziell entstehende Übertrag wird in einer zweiten Addition auf den Vorkommaanteil addiert. Erst zum Schluss werden diese beiden Integerzahlen mit Hilfe eines Strings zu einer Fließkommazahl zusammengesetzt. Dabei muss beachtet werden, dass auf 32bit-Architekturen Perls automatische Integer-Umwandlung von Strings bei Stringlängen von 9 bereits auf die wissenschaftliche Schreibweise wechselt. Das wird verhindert, indem das Math::BigInt-Modul in dem Moment für die Berechnung verwendet wird, aber aus Performancegründen nur dann, wenn's wirklich nötig ist. ---