Exemple #1
0
                    break;
            }
            if ($need_push) {
                array_push($this->stack, $r);
            }
        }
    }
    function calc($expression)
    {
        $this->stack = [];
        $this->parser->parse($expression, [$this, '_calc']);
        return $this->stack[0];
    }
    function tree($expression)
    {
        $this->parser->printTree($expression);
    }
}
/////////////////////////////////////////////////////////////
if (realpath($_SERVER['SCRIPT_FILENAME']) == __FILE__) {
    $calc = new Calculator();
    while ($exp = fgets(STDIN)) {
        try {
            $result = $calc->calc($exp);
            echo "{$result}\n";
        } catch (Exception $e) {
            echo $e->getMessage(), "\n";
        }
    }
    exit;
}
Exemple #2
0
 function testCalc()
 {
     $calc = new Calculator();
     $result = $calc->calc('123');
     $this->assertEquals(123, $result);
     $result = $calc->calc('100 - (35 - 4)');
     $this->assertEquals(100 - (35 - 4), $result);
     $result = $calc->calc('2 * (3 + 4)');
     $this->assertEquals(2 * (3 + 4), $result);
     $result = $calc->calc('9 / 3 * 2');
     $this->assertEquals(9 / 3 * 2, $result);
     $result = $calc->calc('(4+1) * (6 - 1)');
     $this->assertEquals((4 + 1) * (6 - 1), $result);
     $result = $calc->calc('-(11+29)');
     $this->assertEquals(-(11 + 29), $result);
     $result = $calc->calc('4 - -3 * 4');
     $this->assertEquals(4 - -3 * 4, $result);
     $result = $calc->calc('-1 * -1');
     $this->assertEquals(-1 * -1, $result);
     $result = $calc->calc('2.5 * 8');
     $this->assertEquals(2.5 * 8, $result);
     $result = $calc->calc('cos pi/2');
     $this->assertEquals(cos(M_PI) / 2, $result);
     $result = $calc->calc('4 pi-1');
     $this->assertEquals(4 * M_PI - 1, $result);
     $result = $calc->calc('2cos -pi');
     $this->assertEquals(2 * cos(-M_PI), $result);
 }
Exemple #3
0
        switch ($this->operator) {
            case "+":
                return $this->num1 + $this->num2;
                break;
            case "-":
                return $this->num1 - $this->num2;
                break;
            case "*":
                return $this->num1 * $this->num2;
                break;
            case "/":
                if ($this->num2 == 0) {
                    echo "<script>alert('除数不能为0!');</script>";
                    return "除数不能为0!";
                } else {
                    return $this->num1 / $this->num2;
                }
                break;
            default:
                break;
        }
    }
}
if (isset($_POST["btn"])) {
    if (isset($_POST["op"])) {
        $calculator1 = new Calculator($_POST["num1"], $_POST["num2"], $_POST["op"]);
        echo "计算结果:" . $calculator1->calc();
    } else {
        echo "<script>alert('请选择操作!');</script>";
    }
}