【问题标题】:PHP calculator division by zero error ?fix?PHP计算器除以零错误?修复?
【发布时间】:2015-03-16 04:02:05
【问题描述】:

我想做一个计算器。我编写了代码,但问题是当某个数字除以零时会出现异常,因此无法生成正确的结果,是否有解决方法?见代码

<?php
$x = $_POST['x'];
$y = $_POST['y'];
$tafel = 10;
$antwoord = '' ;
{
    if($y = 0)
        return 'Voer voor y een ander getal in';
}

switch ($_POST['type']) {
    case 'plus':
        $antwoord = $x + $y;
        break;
    case 'keer':
        $antwoord = $x * $y;
        break;
    case 'wortel':
        $antwoord = sqrt($x);
        break;
    case 'min':
        $antwoord = $x - $y;
        break;
    case 'deel':
        $antwoord = $x / $y;

        break;
    case 'kwadraat':
        $antwoord = pow($x, 2);
        break;
    case 'macht':
        $antwoord = pow($x, $y);
        break;
    case 'tafel':
        for($i = $x; $i <= 10; $i++){
        echo $x * $i.'<br>';
        }
        break;
    default:
        # code...
        break;
}
echo '<h1 id="answer"> Antwoord:</h1><br>';
echo $antwoord;
            ?>

【问题讨论】:

  • 检查$y 不为零,如果是则不要除以它。
  • 检查是否0 == $y ,然后以这种方式处理错误,不要让它实际产生差异。
  • 解决方法是在尝试进行除法之前检查值是否为零
  • 只是想指出您应该在进行除法之前进行检查。如果0 == $y,您不想停止所有操作,只需要除法。

标签: php calculator


【解决方案1】:

以下语句始终为真,因为您实际上是在 if 语句中分配值,而不是比较它。

if($y = 0)

if(0 == $y)

【讨论】:

  • 好收获。因此,为什么我总是使用 if(0 == $y)... 之类的东西,因为如果我错误地分配值而不是比较它,它会引发错误。 ^^
  • 不错!甚至没有注意到那个。有一种编码风格可以避免这些类型的编程错误。它被称为 yoda 风格,您可以在其中扭转比较。 if(0 = $y) { } 这样语言就会失败,因为你不能将某些东西赋值为零。
  • 这两点都很好!我将对此进行调整以反映这一点。
  • 刚刚意识到...如果0==$y,您仍然希望执行其他操作,因此如果该案例实际上是用于除法,则应该进行错误检查,而不是在所有操作之前将其覆盖。跨度>
【解决方案2】:

只要改变这个:

(如果此代码不在函数中)

return 'Voer voor y een ander getal in';

到这里:

die('Voer voor y een ander getal in');

这样脚本就停止了!你必须像这样进行比较:

if($y == 0)
    //^^ See here 2x '='

有关比较运算符的更多信息,请参阅手册:http://php.net/manual/en/language.operators.comparison.php

【讨论】:

    【解决方案3】:

    下面的代码很适合你

    = 表示赋值

    == 表示比较

    在您的情况下,您需要比较条件

    <?php
        $x = $_POST['x'];
        $y = $_POST['y'];
        $tafel = 10;
        $antwoord = '' ;
        {
            if($y == 0)
                return 'Voer voor y een ander getal in';
        }
    
        switch ($_POST['type']) {
            case 'plus':
                $antwoord = $x + $y;
                break;
            case 'keer':
                $antwoord = $x * $y;
                break;
            case 'wortel':
                $antwoord = sqrt($x);
                break;
            case 'min':
                $antwoord = $x - $y;
                break;
            case 'deel':
                $antwoord = $x / $y;
    
                break;
            case 'kwadraat':
                $antwoord = pow($x, 2);
                break;
            case 'macht':
                $antwoord = pow($x, $y);
                break;
            case 'tafel':
                for($i = $x; $i <= 10; $i++){
                echo $x * $i.'<br>';
                }
                break;
            default:
                # code...
                break;
        }
        echo '<h1 id="answer"> Antwoord:</h1><br>';
        echo $antwoord;
                    ?>
    

    【讨论】:

      猜你喜欢
      • 2020-12-15
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 2014-05-19
      • 2021-01-13
      相关资源
      最近更新 更多