当前位置: 首页 > 面试题库 >

使用eval从字符串计算数学表达式

蒋高超
2023-03-14
问题内容

我想从字符串中计算数学表达式。我已经读过解决方案是使用eval()。但是当我尝试运行以下代码时:

<?php

$ma ="2+10";
$p = eval($ma);
print $p;

?>

它给了我以下错误:

解析错误:语法错误,C:\ xampp \ htdocs \ eclipseWorkspaceWebDev \ MandatoryHandinSite
\ tester.php(4)中意外的$ end:第1行上的eval()代码

有人知道解决这个问题的方法吗?


问题答案:

尽管我不建议eval为此使用(这 不是 解决方案),但问题是eval期望完整的代码行,而不仅仅是片段。

$ma ="2+10";
$p = eval('return '.$ma.';');
print $p;

应该做你想做的。

更好的解决方案是为您的数学表达式编写一个标记器/解析器。这是一个非常简单的基于正则表达式的例子。

$ma = "2+10";

if(preg_match('/(\d+)(?:\s*)([\+\-\*\/])(?:\s*)(\d+)/', $ma, $matches) !== FALSE){
    $operator = $matches[2];

    switch($operator){
        case '+':
            $p = $matches[1] + $matches[3];
            break;
        case '-':
            $p = $matches[1] - $matches[3];
            break;
        case '*':
            $p = $matches[1] * $matches[3];
            break;
        case '/':
            $p = $matches[1] / $matches[3];
            break;
    }

    echo $p;
}


 类似资料:
  • 问题内容: 这将返回以下错误: 我知道可以解决此问题,但是难道没有更好,更重要的是更安全的方法来评估存储在字符串中的数学表达式吗? 问题答案: 可用于解析数学表达式。特别是, 显示了如何解析基本算术表达式。下面,我将fourFn重新包装为一个数字解析器类,以便于重用。

  • Evaluates simple math expression like 2*4 or 10/2 and outputs its result. You can use \ operator which is equivalent to round(a/b). 计算简单的数学表达式,比如2*4 或 10/2,并输出结果。\ 操作符结果同 round(a/b)。 Very useful in CS

  • 我试图编写一个Java例程,从值计算数学表达式,如下所示: 我想避免很多if-then-else语句。我怎么能这么做?

  • 问题内容: 有没有一种方法可以在不使用JavaScript的情况下计算存储在字符串中的公式? 通常我会做类似的事情 那么,有人知道吗? 问题答案: 这正是您应该使用eval的地方,否则您将不得不遍历字符串并生成数字。您将必须使用isNaN方法来执行此操作。

  • 本文向大家介绍Python 执行字符串表达式函数(eval exec execfile),包括了Python 执行字符串表达式函数(eval exec execfile)的使用技巧和注意事项,需要的朋友参考一下 仔细研读后学习了三个函数: eval:计算字符串中的表达式 exec:执行字符串中的语句 execfile:用来执行一个文件 需注意的是,exec是一个语句,而eval()和execfil

  • 本文向大家介绍使用MySQL计算字符串中的字符数,包括了使用MySQL计算字符串中的字符数的使用技巧和注意事项,需要的朋友参考一下 今天,我需要从一个表中获取一些数据,该表中另一个字符串中不止一个字符串出现。基本上,我需要从一个表中查找所有深度超过3级(即带有3个斜杠)的URL,但是意识到在MySQL中没有函数可以执行此操作。我找到了另一种方法,但它使我思考如何可能。 找到解决方案并不是很困难,我