note 98704 modified in function.round by danbrown
| From: | danbrown@php.net | Date: | Thu, 01 Jul 2010 19:49:33 +0000 |
| Subject: | note 98704 modified in function.round by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-170637@lists.php.net to get a copy of this message | ||
I had problem with round() function I didn't gave me the same result in windows or on a linux
server :
<?php
round(4.725, 2); // gave me 4.72 on linux
round(4.725, 2); // gave me 4.73 on windows
?>
The expected result was 4.73
Here my function to resolve my problem
<?php
function mround($number, $precision=0) {
$precision = ($precision == 0 ? 1 : $precision);
$pow = pow(10, $precision);
$ceil = ceil($number * $pow)/$pow;
$floor = floor($number * $pow)/$pow;
$pow = pow(10, $precision+1);
$diffCeil = $pow*($ceil-$number);
$diffFloor = $pow*($number-$floor)+($number < 0 ? -1 : 1);
if($diffCeil >= $diffFloor) return $floor;
else return $ceil;
}
echo mround(4.725, 2); // Yes 4.73
?>
--was--
I had problem with round() function I didn't gave me the same result in windows or on a linux
server :
round(4.725, 2); // gave me 4.72 on linux
round(4.725, 2); // gave me 4.73 on windows
The expected result was 4.73
Here my function to resolve my problem
function mround($number, $precision=0) {
$precision = ($precision == 0 ? 1 : $precision);
$pow = pow(10, $precision);
$ceil = ceil($number * $pow)/$pow;
$floor = floor($number * $pow)/$pow;
$pow = pow(10, $precision+1);
$diffCeil = $pow*($ceil-$number);
$diffFloor = $pow*($number-$floor)+($number < 0 ? -1 : 1);
if($diffCeil >= $diffFloor) return $floor;
else return $ceil;
}
echo mround(4.725, 2); // Yes 4.73
http://php.net/manual/en/function.round.php