0
点赞
收藏
分享

微信扫一扫

java字符串类型数学运算表达式以及精度丢失问题

java字符串类型数学运算表达式以及精度丢失问题

字符串类型数学运算精度丢失问题

  • 方式一:ScriptEngine
    会精度丢失,可执行连续双括号
  • 方式二:hutool ScriptUtil
    会精度丢失,可执行连续双括号
  • 方式三:hutool ScriptUtil
    会精度丢失,可执行连续双括号
  • 方式四: calculator.calculate
    不会精度丢失,且能执行双括号
  • 案例代码:

import cn.hutool.core.math.Calculator;
import cn.hutool.script.ScriptUtil;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

/**
* @ClassName Test
* @Author lpj
* @Date 2022/7/27 15:24
**/
public class Test {
public static void main(String[] args) {
//自定义统计公式
String evCode = "((a+b))+c";
//根据变量获取真实值,替换未可执行真实值
evCode = evCode.replace("a", "0.1");
evCode = evCode.replace("b", "0.2");
evCode = evCode.replace("c", "0.3");
System.out.println("要执行的表达式为: " + evCode);
//jdk自带执行方式,会精度丢失,可执行连续双括号
try {
ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
System.out.println("ScriptEngine执行结果: " + jse.eval(evCode));
} catch (Exception e) {
System.err.println("ScriptEngine执行出错,无法执行此表达式");
}
//hutool ScriptUtil工具,会精度丢失,可执行连续双括号
try {
System.out.println("ScriptUtil执行结果: " + ScriptUtil.eval(evCode));
} catch (Exception e) {
System.err.println("ScriptUtil执行此表达式出错,无法执行此表达式");
}
//hutool Calculator工具,不会精度丢失,但是无法执行双括号表达式,虽然不会这样写,但是在数学中是能计算的
try {
System.out.println("conversion执行结果:" + Calculator.conversion(evCode));
} catch (Exception e) {
System.err.println("conversion执行此表达式出错,无法执行此表达式");
}
//hutto Calculator工具,不会精度丢失,且能执行双括号
try {
Calculator calculator = new Calculator();
System.out.println("calculate执行结果: " + calculator.calculate(evCode));
} catch (Exception e) {
System.err.println("calculate执行此表达式出错,无法执行此表达式");
}

}
}

  • 执行结果:
     
  • java字符串类型数学运算表达式以及精度丢失问题_System

  •  
     



举报

相关推荐

0 条评论