【问题标题】:Javascript/PHP Custom math formula [duplicate]Javascript / PHP自定义数学公式[重复]
【发布时间】:2013-09-25 05:15:52
【问题描述】:

我们可以使用其他变量/数据库中的数学公式吗? 示例:

var x = 7;
var formula = '+';
var y = 10;

我的意思是变量会输出 = 17 (7 + 10);

但是如何使用 Javascript/PHP 来实现这个公式呢?

【问题讨论】:

标签: javascript php math formula


【解决方案1】:

对于您的示例,您可以这样做:

var x = 7;
var formula = '+';
var y = 10;
z = eval(x+formula+y);  // 17
document.write(z);

但是eval 对安全来说是个大问题,你真的不应该使用它。如果您可以提供更多关于您想要实现的目标的详细信息,则可以提出替代方案。

【讨论】:

  • 感谢 Javascript 版本的获胜者 :)
【解决方案2】:

PHP 版本

在php中使用eval()运行一段php代码:

<?php
$x = 7;
$formula = '+';
$y = 10;
$expression = '$result = ' .$x . ' ' . $formula . ' ' . $y . ";";
echo $expression, "\n";    // $result = 7 + 10;
eval($expression);         // run the code
echo $result, "\n";        // ouput 17

see the result of the code here

【讨论】:

  • 感谢你的 PHP 版本的获胜者 :)
【解决方案3】:

在 php 中你可以使用如下。这样就可以避开eval

$x = 7;
$formula = '+';
$y = 10;

switch ($formula) {

case "+" : $res = $x + $y;
          break;

case "-" : $res = $x - $y;
          break;

.
.
.
.


}

echo $res;

【讨论】:

    【解决方案4】:

    这样的东西应该可以在 PHP 和 javascript 中工作(稍加修改)。此外,出于安全原因,我建议不要使用 eval 。

    function math($x, $y, $sign){
        switch($sign){
            case '+':
                return $x + $y;
            case '-':
                return $x - $y;
            case '*':
                return $x * $y;
            case '/':
                return $x / $y;
            default:
                return;
        }
    }
    $x = 7;
    $formula = '+';
    $y = 10;
    echo math($x, $y, $formula);#returns 17
    

    【讨论】:

      【解决方案5】:

      如果您将使用“eval()”重复评估文本公式,您可能希望将其存储在函数中 - 如下所示:

      var formula = "x + y";
      var func;
      eval("func = function(){return" + formula + "}");
      

      此时,当变量 x 和 y 存在于给定范围内时,您可以随时调用“func()”。例如:

      var x = 7;
      var y = 10;
      var answer = func();
      

      那么 answer 的值就是“17”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-18
        • 2014-11-25
        • 2019-10-21
        相关资源
        最近更新 更多