I have small problem and it might be silly somewhere, but still i have it :)
So the problem is:
By doing this
round(615.36*0.10, 2, PHP_ROUND_HALF_DOWN);
I expect outcome to be 61.53
, but it's 61.54
.
phpVersion = 5.3.2
Could anyone help me to solve this? Thanks.
PHP_ROUND_HALF_DOWN
will round the half -- i.e. the 0.005
part.
if you have 61.535
, using PHP_ROUND_HALF_DOWN
will get you 61.53
-- instead of the 61.54
you should have obtained with usual rounding.
Basicall, the .005
half has been rounded down.
But 61.536
is not a half : .006
is more than .005
; so rounding that value gives 61.54
.
In your case, you could multiply the value by 100, use the floor() function, and divide the result by 100 -- I suppose it would give you what you expect :
$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);
Gives me :
float(61.53)
If you want to round down, you'll need to use floor(), which doesn't have a means to specify precision, so it has to be worked around, eg. with
function floor_prec($x, $prec) {
return floor($x*pow(10,$prec))/pow(10,$prec);
}
you obviously only wanting it to two decimal places why not just number_format(615.36*0.10, 2)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With