Cómo JAVA calcula la fórmula de cadena

Solución 1: use el paquete jar commons-jexl3

Puede usar el commons-jexl3paquete jar, que proporciona algunos métodos para calcular la fórmula en la cadena.
maven depende de lo siguiente:

<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-jexl3</artifactId>
	<version>3.1</version>
</dependency>

Código de muestra:

	@Test
    public void test03() {
    
    
        String expressionString = "27.0/10";
        JexlEngine jexlEngine = new JexlBuilder().create();
        JexlExpression jexlExpression = jexlEngine.createExpression(expressionString);
        Object evaluate = jexlExpression.evaluate(null);
        System.out.println(evaluate);
    }

El resultado del cálculo es el siguiente: para evitar la pérdida de precisión, debe existir al menos un valor de precisión en la fórmula de cálculo. Si puede usar el método de reemplazo de cadena, replaceAll para reemplazar un cierto valor en la fórmula como un valor de precisión, de modo que no haya pérdida de precisión.
Inserte la descripción de la imagen aquí

Solución 2: use la capa inferior de JDK para llamar a la fórmula de cálculo de javaScript (recomendado)

La clase que viene con JDK puede realizar la función de llamar a JS y la función de ejecutar la fórmula de cálculo en la cadena. El código de muestra es el siguiente:

	@Test
    public void test04() throws ScriptException {
    
    
        ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
        String strs = "27/10";
        System.out.println(jse.eval(strs));
    }

Los resultados son los siguientes: usar este esquema puede evitar directamente la pérdida de precisión, si hay variables en la fórmula como elementos de la operación, puede usar el método replaceAll de la cadena para reemplazar.
Inserte la descripción de la imagen aquí
El código de muestra del método de reemplazo es el siguiente:

	@Test
    public void test04() throws ScriptException {
    
    
        ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
        String strs = "1+b";
        strs = strs.replace("b", "9");
        System.out.println(jse.eval(strs));
    }

Supongo que te gusta

Origin blog.csdn.net/qq_43647359/article/details/107821763
Recomendado
Clasificación