Immer Aufrunden auf 0.01

Estdely

Grünschnabel
Ich bräuchte eure Hilfe, da ich einfach nicht weiter komme.

Bisher sieht das ganze so aus:

// Order price to .00 decimal points
$price = (float)$package_price * $quantity;
$price = number_format($price, 2, '.', '');

Ist der Preis nun aber bei 0.0148 wird auf 0.01 gerundet
Wie bekomme ich das hin, dass er immer auf die nächsten 0.01 rundet (also im Beispiel auf 0.02)
Auch bei 0.012 soll er auf 0.02 runden.
 
Hi,

PHP:
$price = 0.0148;
$price = ceil($price * 100.0) / 100.0;

Ungetestet, sollte aber so funktionieren.

Grüsse,
BK
 
Danke für die Rückmeldung.

$package_price = 0.0001;
$quantity = 300;
$price = (float)$package_price * $quantity;
$price = ceil($price * 100.0) / 100.0;
$price = number_format($price, 2, '.', '');
echo $price;
-> 0.04

Sollte doch eigentlich 0.03 ausgeben oder nicht?
 
Hi,

PHP:
$package_price = 0.0001;
$quantity = 300;
$price = $package_price * $quantity;
$price = intval($price * 100.0) / 100.0;
$price = number_format($price, 2, '.', '');
echo $price;

Jetzt sollte es aber gehen :)

Zur Erklärung: Anscheinend kann er (durch die Binärdarstellung bedingt) deine 0.0001*300*100=3.0 nicht genau darstellen. Ich vermute, dass er hier intern irgendwas mit 3.0000...1 hat. Somit wird durch das ceil() der Wert aufgerundet, sprich zu 4. Durch die Verwendung von intval() wird allerdings der Nachkommateil einfach abgeschnitten, sprich ein Integer daraus. Die anschliessende Teilung durch 100.0 wandelt diesen Wert wieder zu einem Float / Double um, welcher dann im number_format zur Richtigen Präzision umgewandelt wird.

Grüsse,
BK
 

Neue Beiträge

Zurück