【问题标题】:Executing math equation in Android在Android中执行数学方程
【发布时间】:2012-04-18 20:16:23
【问题描述】:

我需要能够在我的应用中处理诸如“(45+9)/8”之类的数学方程式。我只想使用 JavaScript 评估它,但意识到我不能在 Android 中使用 javax.script。所以,我找到了 WebView,但我在使用它时遇到了一些麻烦。大多数示例是指使用带有 JS 代码的外部页面,或者使用“javascript: var return ...etc”。我需要使用后者,但是将变量返回到我的应用程序时遇到了一些麻烦。

是否可以让 JS 对其进行评估,然后将值写入隐藏的 TextView?

【问题讨论】:

  • 老兄,不需要 javascript。您只需要使用标准 Java 来计算数学方程式。
  • 我将它用于用户输入的方程。这意味着我必须能够评估一个字符串。

标签: java javascript android


【解决方案1】:

查看exp4j。它是一个简单的 java 表达式求值器。对于您在问题中发布的方程式,您可以这样做:

Calculable calc = new ExpressionBuilder("(45+9)/8").build()
double result1=calc.calculate();

【讨论】:

  • 您的回答绝对看起来比我希望的更好。 android 应用中的 de 和 META-INF 文件夹应该放在哪里?
  • 您只需将 jar 放入您的 /libs 目录即可。
【解决方案2】:

试试这个:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.swing.JOptionPane;

private void btnEqualsActionPerformed(java.awt.event.ActionEvent evt) {
    String expression = txtResult.getText();
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("JavaScript");
    try {
        result = engine.eval(expression).toString();
        txtResult.setText(result);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, txtResult.getText() + " cannot be calculated. Try again!", "Error on calculation!", JOptionPane.WARNING_MESSAGE);
        txtResult.setText("");
    }
}

【讨论】:

  • 我无法在 Android 中导入所需的类。
【解决方案3】:

更高级表达的有趣选项可能是将some online calculator 转换为可以在手机上使用的网络服务。

【讨论】:

  • 没有可用连接怎么办?如果您可以在没有可达性的情况下评估表达式,那么强制这样做会更好。
【解决方案4】:

您可以在 android studio 中使用 exp4j 来做到这一点。

  • 从官方网站下载 exp4j 二进制 jar。 Download

  • 通过复制app/libs中的jar文件将exp4j导入android studio 文件夹。

  • 在您的模块 build.gradle 文件依赖项中添加以下行。

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        ...
    }
    

现在你可以试试下面的演示了,

package com.example.expressionevaluator;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

import de.congrace.exp4j.Calculable;
import de.congrace.exp4j.ExpressionBuilder;
import de.congrace.exp4j.UnknownFunctionException;
import de.congrace.exp4j.UnparsableExpressionException;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Calculable calc = null;
        try {
            calc = new ExpressionBuilder("(200 + 100) / 2 + 300").build();
            double result = calc.calculate();
            Log.d("result", result);

        } catch (UnknownFunctionException e) {
            e.printStackTrace();
        } catch (UnparsableExpressionException e) {
            e.printStackTrace();
        }
    }
}

更多:

https://lallafa.objecthunter.net/exp4j/

https://github.com/codemaker2015/Expression-Evaluator

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 2013-01-26
    • 2012-08-11
    • 2015-08-21
    相关资源
    最近更新 更多