7 Stimmen

Dummerchen, ich kann nicht herausfinden, wie man php abrundet :(

Ich habe ein kleines Problem und es könnte irgendwo dumm sein, aber trotzdem habe ich es :)

Das Problem ist also:

Auf diese Weise

round(615.36*0.10, 2, PHP_ROUND_HALF_DOWN);

Ich erwarte ein Ergebnis, das 61.53 aber es ist 61.54 .

phpVersion = 5.3.2

Kann mir jemand helfen, dieses Problem zu lösen? Danke!

13voto

Pascal MARTIN Punkte 384469

PHP_ROUND_HALF_DOWN wird die halb -- d.h. die 0.005 Teil.

wenn Sie 61.535 , mit PHP_ROUND_HALF_DOWN erhalten Sie 61.53 -- anstelle der 61.54 sollten Sie erhalten haben mit übliche Rundung .
Grundsätzlich gilt, dass die .005 halb ist abgerundet worden.

Mais 61.536 ist keine halbe : .006 ist mehr als .005 ; die Rundung dieses Wertes ergibt also 61.54 .


In Ihrem Fall könnten Sie den Wert mit 100 multiplizieren, die floor() Funktion und dividieren Sie das Ergebnis durch 100 - ich nehme an, dass Sie damit das erhalten, was Sie erwarten:

$value = 61.536;
$value_times_100 = $value * 100;
$value_times_100_floored = floor($value_times_100);
$value_floored = $value_times_100_floored / 100;
var_dump($value_floored);

Das gibt mir :

float(61.53)

2voto

Patrick Georgi Punkte 658

Wenn Sie abrunden wollen, müssen Sie floor() verwenden, das keine Möglichkeit hat, die Genauigkeit anzugeben, so dass es umgangen werden muss, z. B. mit

function floor_prec($x, $prec) {
   return floor($x*pow(10,$prec))/pow(10,$prec);
}

1voto

bertsisterwanda Punkte 153

Sie wollen offensichtlich nur zwei Dezimalstellen, warum nicht einfach number_format(615.36*0.10, 2)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X