PHP中的二次方程求解器

3
我可以帮助您翻译。以下是翻译的结果,已保留HTML标签格式:

我尝试使用PHP制作一个二次方程求解器:

index.html:

<html>
    <body>
        <form action="findx.php" method="post">
            Find solution for ax^2 + bx + c<br>
            a: <input type="text" name="a"><br>
            b: <input type="text" name="b"><br>
            c: <input type="text" name="c"><br>
            <input type="submit" value="Find x!">
        </form>   
    </body>
</html>

findx.php:

<?php
    if(isset($_POST['a'])){ $a = $_POST['a']; } 
    if(isset($_POST['b'])){ $b = $_POST['b']; } 
    if(isset($_POST['c'])){ $c = $_POST['c']; }

    $d = $b*$b - 4*$a*$c;
    echo $d;

    if($d < 0) {
        echo "The equation has no real solutions!";
    } elseif($d = 0) {
        echo "x = ";
        echo (-$b / 2*$a);
    } else  {
        echo "x1 = ";
        echo ((-$b + sqrt($d)) / (2*$a));
        echo "<br>";
        echo "x2 = ";
        echo ((-$b - sqrt($d)) / (2*$a));
    }
?>

问题在于它返回错误的答案(d是正确的,x1和x2不是),似乎sqrt()返回了零或者其他什么东西。


你对于什么输入参数得到了什么结果?你期望得到什么? - Ocaso Protal
1个回答

4

这一行有一个错别字:

elseif($d = 0)

它是在赋值给变量$d的值为0,而不是比较它。这意味着你总是在else块中计算sqrt(0),即0。

应该改为:

elseif($d == 0)


在那些不会至少发出警告的语言中,一个有用的习惯是将常量放在左边:if (0 = $d) 将会失败。 - Richard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接