Hell-O!
Kann jemand sich folgenden Effekt erklären:
Als Lektüre empfehlen sich der Abschnitt Data:Numbers in perlfaq4 und der Abschnitt Storing Numbers in perlnumber.
beim Multiplizieren und Dividieren rundet Perl aus irgendeinem Grund die Ergebnisse, wenn die Ausgangswerte errechnet wurden.
Perl hat halt nur eine beschränkte Möglichkeit, Zahlen intern darzustellen, nämlich binär. Das funktioniert halt bei manchen Zahlen gut, bei den meisten jedoch nur näherungsweise:
printf "%.30g", 0.125;
# 0.125
printf "%.30g", 0.825;
# 0.824999999999999955591079014994
Um hier quasi den Überblick zu behalten, ist Perl zum Runden gezwungen, seine Grenzen findet es hier beim verwendeten Betriebssystem. Da du mit keiner Silbe erwähnst, welche Größenordnungen $gesamtsumme und $runtime haben, kann man nur raten, ob überhaupt und wenn ja welche Variable hier möglicherweise der Übeltäter ist.
#Erster Versuch: Es wird gerundet
#Jahressumme = 3737500 ist in einem vorangehenden Abschnitt errechnet worden; Es sollte sich $volume = 0.055 * 3 = 0.165 ergeben.
Perl liefert aber 0 zurück.
Bist du sicher? Hast du dir mal mittels printf die Zwischenschritte ($Jahressumme bzw. $volume) ausgeben lassen?
#Zweiter Versuch: Jahressumme wird fest vorgegeben, kein Runden, Ergebnis OK.
Das lässt darauf schließen, dass einer der Variablen, die du in der Berechnung von $jahressumme verwendest, zu dem beobachteten Ergebnis führt. Welche das ist, kann man ohne mehr Details nicht sagen. Btw, du solltest ggf. überlegen, auf die Module Math::BigFloat bzw. Math::BigInt oder ein anderes passendes aus dieser Modulfamilie zurückzugreifen.
Gibt es eventuell am Server Einstellungen, die das Rundungsverhalten beeinflussen?
Gute Frage, kann ich mir eigentlich nicht vorstellen.
Nach zwei Tagen Rumprobierens bin ich mit meinem Latein am Ende. Das Manual sagt hier nur lapidar: 'Perl rechnet exact so wie Sie es erwarten.' Sind meine Erwartungen überzogen?
Naja, Perl ist von Haus aus eben kein Taschenrechner :-)
Siechfred
Hier könnte Ihre Werbung stehen.
Die schlechtesten Cover aus dem Bereich Hard and Heavy || Schöne Wörter, Teil 1