Freunde der Nacht,
sagt mal.
Folgender Quellcode:
Diese ultra-krasse Funktion soll so runden, dass bei den Cents höchstens eine 0 oder eine 5 am Ende steht.
Eingegebener Betrag ist in Cent! Das heisst, wenn 5 Euro mit MwSt. versehen werden sollen, muss $price = 500 sein.
Steuer war in dem Fall 7.6%.
Jetzt hatte ich einen Fall, bei dem als eingegebene Grössen 369 + 194 = 563 hineinkam. Also
mwst_price(56300);
So.
Er rechnet fleissig aus:
563 * 1.076 * 20 = 12115.76 - gerundet auf ganze Zahl = 12116
12116 / 20 * 100 = 60580
Bingo - am Ende steht eine 0 - wie es sein sollte.
Leider gibt round() eine Float-Zahl zurück. Gebraucht werden würde aber Integer.
Dafür gibt es ja glücklicherweise die Intval-Funkion.
Aber - believe it or not - das Ergebnis ist dann:
60579
Frage: Wieso?
Hab ich was verpasst? Bug?
sagt mal.
Folgender Quellcode:
PHP:
function mwst_price($price) {
global $options;
$mwst = $options['mwst'];
$mwst *= 10;
$mwst += 1000;
$mwst /= 1000;
$price /= 100;
return intval(round($price * $mwst * 20) / 20 * 100);
}
Diese ultra-krasse Funktion soll so runden, dass bei den Cents höchstens eine 0 oder eine 5 am Ende steht.
Eingegebener Betrag ist in Cent! Das heisst, wenn 5 Euro mit MwSt. versehen werden sollen, muss $price = 500 sein.
Steuer war in dem Fall 7.6%.
Jetzt hatte ich einen Fall, bei dem als eingegebene Grössen 369 + 194 = 563 hineinkam. Also
mwst_price(56300);
So.
Er rechnet fleissig aus:
563 * 1.076 * 20 = 12115.76 - gerundet auf ganze Zahl = 12116
12116 / 20 * 100 = 60580
Bingo - am Ende steht eine 0 - wie es sein sollte.
Leider gibt round() eine Float-Zahl zurück. Gebraucht werden würde aber Integer.
Dafür gibt es ja glücklicherweise die Intval-Funkion.
Aber - believe it or not - das Ergebnis ist dann:
60579
Frage: Wieso?
Hab ich was verpasst? Bug?