【问题标题】:PHP Undefined Constant PHP_ROUND_HALF_DOWNPHP 未定义常量 PHP_ROUND_HALF_DOWN
【发布时间】:2011-02-09 17:34:59
【问题描述】:

我正在处理的项目中有一些 PHP 代码使用 PHP 的 round 函数。在我的本地主机上,我没有在我的模式参数周围包含任何引号,将其声明为 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]

现在,当我将单引号添加到模式参数时,第一个错误消失了,但是“错误的参数计数”仍然存在。我调用函数如下:

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

感谢您的所有帮助!

【问题讨论】:

标签: php constants undefined rounding


【解决方案1】:

模式参数仅为added in PHP 5.3.0. 如果您运行的是早期版本的 PHP,则不会定义模式选项常量(PHP_ROUND_HALF_UP、PHP_ROUND_HALF_DOWN、PHP_ROUND_HALF_EVEN 和 PHP_ROUND_HALF_ODD)

编辑

5.3.0 之前的 round() 不能使用 mode 参数,但可以通过组合函数实现等效:

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

【讨论】:

  • 有没有办法仍然使用模式参数?谢谢!
  • 谢谢。问题:为什么你使用 100?使用 10 而不是 100 也可以。
  • 2dp 使用 100,3dp 使用 1000,5dp 使用 100000,等等...... 计算零的数量
【解决方案2】:

rounding mode 是在 PHP 5.3 中添加的。确保您至少运行该版本。

您可以通过将以下内容放入 PHP 文件中来查看您正在运行的版本:

var_dump(phpversion());

【讨论】:

    【解决方案3】:

    PHP_ROUND_HALF_DOWN 需要 PHP 5.3.0,如下所示:http://php.net/manual/en/math.constants.php

    您可能使用的是较低的 PHP 版本。

    【讨论】:

      【解决方案4】:

      round() 默认使用 PHP_ROUND_HALF_UP 但您只能在 PHP >= 5.3.0 中更改它

      要模拟 PHP_ROUND_HALF_DOWN 我认为您可以在舍入前从数字中减去 (1/10^(precision+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
      ?>
      

      【讨论】:

        【解决方案5】:

        您的服务器上运行的是什么版本的 PHP?根据the docs,只有 PHP 5.3 或更高版本支持 PHP_ROUND 常量。

        【讨论】:

          【解决方案6】:

          你的版本支持PHP_ROUND_HALF_DOWN吗?

          According to the documentation 模式直到 5.3 才引入

          5.3.0    The mode parameter was introduced.
          

          您可以改用floor(如果您想另辟蹊径,也可以使用ceil

          【讨论】:

            【解决方案7】:

            $mode 是在 PHP 5.3 上添加的

            检查php的版本:

            php -v
            

            编辑: 或者使用 php 的 phpinfo() 程序

            干杯

            【讨论】:

              【解决方案8】:
              $qty = 15;
              $size = 6;
              $box= round(($qty)/($size), 0, PHP_ROUND_HALF_ODD);
              $picecs = ($qty)%($size);
              echo 'BOX=='.$box. 'PICECS==='.$picecs;
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-08-19
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多