PHP Undefined Constant PHP_ROUND_HALF_DOWN
Solution 1
The rounding mode was added in PHP 5.3. Make sure you're running at least that version.
You can see which version you're running by placing the following in a PHP file:
var_dump(phpversion());
Solution 2
The mode argument was only added in PHP 5.3.0. If you're running an earlier version of PHP, then the mode option constants (PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN, and PHP_ROUND_HALF_ODD) won't be defined
EDIT
You can't use the mode argument for round() prior to 5.3.0, but you can achieve the equivalent by combining functions:
round(floor($value * 100) / 100,2); // to round down to 2dp
round(floor($value * 1000) / 1000,3); // to round down to 3dp
round(ceil($value * 100) / 100,2); // to round up to 2dp
Solution 3
PHP_ROUND_HALF_DOWN
requires PHP 5.3.0 as seen here: http://php.net/manual/en/math.constants.php
You're probably on a lower PHP version.
Solution 4
round() defaults to using PHP_ROUND_HALF_UP but you can only change it in PHP >= 5.3.0
To emulate PHP_ROUND_HALF_DOWN I think you can subtract (1/10^(precision+1))*5 from the number before rounding.
to put it simply;
<?php
$number=20.005;
$precision=2;
echo round($number,$precision); //20.01
echo round($number-(1/10^($precision+1))*5,$precision); //20.00
echo round($number-0.005,2); //20.00
?>
Solution 5
What version of PHP is running on your server? According to the docs only PHP 5.3 or greater supports the PHP_ROUND constants.
Related videos on Youtube
Eric
Updated on May 19, 2022Comments
-
Eric almost 2 years
I have some PHP code in a project I'm working on that uses PHP's round function. On my localhost, I don't include any quotes around my mode argument, stating it as just PHP_ROUND_HALF_DOWN. However, when pushing to my server I get the error message:
Use of undefined constant PHP_ROUND_HALF_DOWN - assumed 'PHP_ROUND_HALF_DOWN' Warning (2): Wrong parameter count for round() [APP/views/helpers/time_left.php, line 14]
Now, when I add the single quotes to the mode argument, the first error goes away, however the "wrong parameter count" remains. I'm calling the function as follows:
$days = round(($difference/$day), 0, PHP_ROUND_HALF_DOWN);
Thanks for any and all help!
-
Eric about 13 yearsIs there a way to still use the mode argument? Thanks!
-
carlos over 8 yearsThanks. Question: Why you use 100?. Using 10 instead 100 also works.
-
Mark Baker over 8 yearsUse 100 when it's 2dp, 1000 for 3dp, 100000 for 5dp, etc.... count the number of zeroes