PHP Undefined Constant PHP_ROUND_HALF_DOWN

10,855

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.

Share:
10,855

Related videos on Youtube

Eric
Author by

Eric

Updated on May 19, 2022

Comments

  • Eric
    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
    Eric about 13 years
    Is there a way to still use the mode argument? Thanks!
  • carlos
    carlos over 8 years
    Thanks. Question: Why you use 100?. Using 10 instead 100 also works.
  • Mark Baker
    Mark Baker over 8 years
    Use 100 when it's 2dp, 1000 for 3dp, 100000 for 5dp, etc.... count the number of zeroes