note 98704 modified in function.round by danbrown

From: 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

« previous php.notes (#170637) next »