【问题标题】:How to bypass a Divide by zero warning in php? [closed]如何绕过php中的除以零警告? [关闭]
【发布时间】:2014-03-08 16:26:37
【问题描述】:

从 MYSQL 数据库中获取数据后,我有一个简单的除法计算

$calculation = round($number1/$number2,2);

有时 $number2 以 0 出现在数据库中,我得到除以零的错误,有没有办法防止除以零警告并默认显示零?

【问题讨论】:

  • 这似乎与 MySQL 无关。你是说 PHP 吗?
  • 哎呀,错误 - 我正在使用 php。
  • 不要除以零。 (抱歉,这很明显。使用IF 结构来选择何时进行除法)
  • downvoters - 至少发表评论

标签: php divide-by-zero


【解决方案1】:
$gpg = $games == 0 ? 0 : round($goals / $games, 2);
$mpg = $goals == 0 ? 0 : round($minutes / $goals);

【讨论】:

    【解决方案2】:

    使用条件句:

    $gpg = round($goals/($games ? $games : 1),2); // forces divisor to be 1 if $games == 0 
    $mpg = round($minutes/($goals ? $goals : 1,2); // forces divisor to be 1 if $goals == 0
    

    注意:这会产生 0 值。您可能想使用if/else 逻辑来表示统计信息“不适用”,或者当您有0 除数时不要尝试计算这些统计信息。

    关于格式:

    echo number_format($theNumber, 2);
    

    例子:

    echo number_format(1, 2); // outputs 1.00
    

    【讨论】:

    • 谁投了反对票,请注意关于计算有用统计数据的解释性评论。
    【解决方案3】:
    if($goals != 0){
      $gpg = round($goals/$games,2);
      $mpg = round($minutes/$goals,2);
    }
    

    【讨论】:

    • 你能告诉我为什么这被否决了吗?
    • 出于格式化原因,我需要零来显示我回显它的位置,否则我只有一个空 div
    • 好的,然后在里面也使用一个else,所以如果有一个零,你可以处理它。
    【解决方案4】:

    您需要一个例外或在检测到零除之前,请查看:

    <?php
    /* Detect division by zero in PHP
     * 
     * More info:
     * 
     * - http://rosettacode.org/wiki/Detect_division_by_zero
     * -  http://www.php.net/trigger_error
     * -   http://php.net/error_get_last
     * 
     */ 
    function tryDivision($x, $y) {
      $defaultVal = -1;
      @trigger_error('');
      $result = @($x / $y);
      if( $result === false) {
        /* Debug ERROR:
         * $e = error_get_last();
         * echo $e['message']; -> Division by zero
         * more information check: var_dump($e);
         */
        return $defaultVal;
      }
      return round($result, 2);
    }
    
    $gpg = tryDivision($goals, $games);
    $mpg = tryDivision($minutes, $goals);
    

    【讨论】:

      猜你喜欢
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多