Неопределенная константа PHP PHP_ROUND_HALF_DOWN - PullRequest
6 голосов
/ 09 февраля 2011

У меня есть некоторый код PHP в проекте, над которым я работаю, который использует функцию округления PHP. На моем локальном хосте я не включаю кавычки вокруг аргумента mode, заявляя, что это просто PHP_ROUND_HALF_DOWN. Однако при нажатии на мой сервер я получаю сообщение об ошибке:

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]

Теперь, когда я добавляю одинарные кавычки к аргументу mode, первая ошибка исчезает, но остается «неправильный счетчик параметров». Я вызываю функцию следующим образом:

$days = round(($difference/$day), 0, PHP_ROUND_HALF_DOWN);

Спасибо за любую помощь!

Ответы [ 7 ]

11 голосов
/ 09 февраля 2011

Аргумент режима был добавлен только в PHP 5.3.0. Если вы используете более раннюю версию PHP, то константы параметров режима (PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN и PHP_ROUND_HALF_ODD) не будут определиться

EDIT

Вы не можете использовать аргумент mode для round () до 5.3.0, но вы можете получить эквивалент, комбинируя функции:

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
9 голосов
/ 09 февраля 2011

Режим округления был добавлен в PHP 5.3. Убедитесь, что вы используете хотя бы эту версию.

Вы можете увидеть, какую версию вы используете, поместив в файл PHP следующее:

var_dump(phpversion());
5 голосов
/ 09 февраля 2011

PHP_ROUND_HALF_DOWN требует PHP 5.3.0, как показано здесь: http://php.net/manual/en/math.constants.php

Возможно, вы используете более низкую версию PHP.

3 голосов
/ 10 февраля 2012

round () по умолчанию использует PHP_ROUND_HALF_UP, но вы можете изменить его только в PHP> = 5.3.0

Для эмуляции PHP_ROUND_HALF_DOWN Я думаю, вы можете вычесть (1/10 ^ (точность + 1)) * 5от числа до округления.

проще говоря;

<?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
?>
2 голосов
/ 09 февраля 2011

Поддерживается ли PHP_ROUND_HALF_DOWN вашей версией?

Согласно документации * режим 1005 * не был введен до 5,3

5.3.0    The mode parameter was introduced.

Вместо этого вы можете использовать floor (или ceil, если хотите пойти другим путем)

2 голосов
/ 09 февраля 2011

Какая версия PHP работает на вашем сервере?Согласно документация только PHP 5.3 или выше поддерживает константы PHP_ROUND.

0 голосов
/ 09 февраля 2011
Режим

$ был добавлен в PHP 5.3

проверить версию php:

php -v

редактировать: или используйте процедуру phpinfo () php

ура

...