7

アプリで「(45 + 9)/8」などの数式を処理できる必要があります。JavaScriptを使用して評価したかったのですが、Androidではjavax.scriptを使用できないことに気付きました。それで、WebViewを見つけましたが、それを使用するのに少し問題があります。ほとんどの例は、JSコードで外部ページを使用するか、「javascript:varreturn...etc」を使用することを示しています。後者を使用する必要がありますが、変数をアプリに返すのに少し問題があります。

JSに評価させてから、非表示のTextViewに値を書き込むことは可能ですか?

4

4 に答える 4

11

exp4jをチェックしてください。これは、Javaの単純な式エバリュエーターです。あなたがあなたの質問に投稿した方程式については、あなたはただすることができます:

Calculable calc = new ExpressionBuilder("(45+9)/8").build()
double result1=calc.calculate();
于 2012-04-05T05:09:22.247 に答える
1

これを試してください:

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("");
    }
}
于 2016-01-29T12:15:32.150 に答える
0

より高度な表現のための興味深いオプションは、いくつかのオンライン計算機をあなたの携帯電話から使用できるウェブサービスに変えることかもしれません。

于 2012-04-05T06:19:50.827 に答える
0

これは、AndroidStudioでexp4jを使用して行うことができます。

  • 公式サイトからexp4jバイナリjarをダウンロードします。ダウンロード

  • フォルダ内のjarファイルをコピーして、exp4jをandroidstudioにインポートしapp/libs ます。

  • 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

于 2021-12-14T10:39:16.540 に答える