Intval vs. Round - Bug in PHP?

rellek

relativ sensationell
Teammitglied
Freunde der Nacht,

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?
 

rellek

relativ sensationell
Teammitglied
Bei mir ist 60580 aber ne ganze Zahl. ;)

return (int) round($price * $mwst * 20) / 20 * 100;

ging auch nicht. Selbes Ergebnis.
 

Titus

Goldmember
stimmt hatte ich übersehen, dachte der zwickt das ab

was passiert wenn du round( $ergebnis, 0) benutzt, oder mit dem Mode Parameter?
 

Titus

Goldmember
gibs zu, das läuft auf nem alten Pentium in deinem Keller, der kann das garnicht richtig rechnen! ^^
 
Oben