在Android中执行数学方程

Posted

技术标签:

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

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

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

【问题讨论】:

老兄,不需要 javascript。您只需要使用标准 Java 来计算数学方程式。 我将它用于用户输入的方程。这意味着我必须能够评估一个字符串。 【参考方案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

【讨论】:

以上是关于在Android中执行数学方程的主要内容,如果未能解决你的问题,请参考以下文章

vba中的数学方程

Android 逆向Android 中常用的 so 动态库 ( libm.so 数学函数动态库 | liblog.so 日志模块动态库 | libselinux.so 安全模块动态库 )(

Android 逆向Android 中常用的 so 动态库 ( libm.so 数学函数动态库 | liblog.so 日志模块动态库 | libselinux.so 安全模块动态库 )(

黎曼函数方程——数学上最美丽的方程之一

Android多线程下载大文件解析

如何使用数字键盘输入键执行方程? [复制]