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

  • 方式一: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字符串类型数学运算表达式以及精度丢失问题的更多相关文章

  1. java 解析四则混合运算表达式并计算结果

    package ch8; import java.util.LinkedList; import java.util.List; import java.util.Stack; /** * 四则混合运 ...

  2. C#数学运算表达式解释器

    C#数学运算表达式解释器 測试文件内容: a=2+3*2; b=2*(2+3); 浏览按钮事件处理程序: private void button_browse_Click(object sender, ...

  3. Java基本类型与运算

    问题及答案来源自<Java程序员面试笔试宝典>第四章 Java基础知识 4.4基本类型与运算 1.Java提供了哪些基本数据类型? Java一共提高了八种原始的数据类型:byte.shor ...

  4. java 字符串类型String

    在本质上,字符串实际上一个char类型的数组,由java.lang.String类来表示,该类具有一系列的属性和方法,提供对字符串的一些操作.除此之外,java还提供了StringBuffer类来处理 ...

  5. Java中的数学运算BigDecimal

    Math类 package ch7; /** * Created by Jiqing on 2016/11/24. */ public class MathDemo { public static v ...

  6. Java字符串类型详解

    Java 字符串类主要有String.StringBuffer.StringBuilder.StringTokenizer 1.字符串类型底层都是使用char数组进行实现. 2.从jdk1.7以后,S ...

  7. 后端将Long类型数据传输到前端出现精度丢失的问题

    当将超过16位的数字传输到前端的时候,就会出现精度丢失的问题,然后我按照网上的几种方法实验的时候,只有一种方法成功了.可能是因为环境等方面的问题. 我这里成功是因为:最后使用的是配置mvc的方式,然后 ...

  8. 面试问题-使用Java线程做数学运算

    这是一个展示如何使用join()方法的例子. 问题: 使用Java多线程计算表达式1*2/(1+2)的值. 解决方案: 使用一个线程做加法运算,另一个线程做乘法运算,还有一个主线程main做除法运算. ...

  9. java字符串类型和时间类型的转换

    类型转换 //reqeust.getParameter获取字符串直接赋值 1 public static Date date(String date_str) { try { Calendar zca ...

随机推荐

  1. 一探 Vue 数据响应式原理

    一探 Vue 数据响应式原理 本文写于 2020 年 8 月 5 日 相信在很多新人第一次使用 Vue 这种框架的时候,就会被其修改数据便自动更新视图的操作所震撼. Vue 的文档中也这么写道: Vu ...

  2. 使用 IDEA 构建聚合工程并引入 Spring Boot

    简介 聚合工程里可以分为: Project 项目,也可称为顶级项目.顶级工程.父工程 Module 模块,也可称为子模块.子工程 总结一下: 这两者之间是父子继承的关系,即 模块继承顶级项目,模块之间 ...

  3. hive从入门到放弃(六)——常用文件存储格式

    hive 存储格式有很多,但常用的一般是 TextFile.ORC.Parquet 格式,在我们单位最多的也是这三种 hive 默认的文件存储格式是 TextFile. 除 TextFile 外的其他 ...

  4. linux篇-linux 下建立多个tomcat

    第一步:复制,解压 将准备好的tomcat压缩包复制到你准备安装的目录,我的tomcat压缩包名字是tomcat.tar.gz,我的安 装目录是 /usr/java/tomcat 第二步:解压tomc ...

  5. 每天一个 HTTP 状态码 101

    101 Switching Protocols 当客户端的请求具有 Upgrade HTTP 首部,表示要求服务器切换到指定协议:此时服务器端就可以向客户端响应 101 Switching Proto ...

  6. CentOS 7.9 安装 zookeeper-3.7.0

    1. 下载 Zookeeper Zookeeper 官网 使用 wget 下载: wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper ...

  7. Redis(1)- Redis数据库的安装和配置

    1.Redis安装 1.1.Linux环境安装Redis step-1:下载Redis 进入官网找到下载地址 https://redis.io/download wget https://github ...

  8. Golang 常见设计模式之单例模式

    之前我们已经看过了 Golang 常见设计模式中的装饰和选项模式,今天要看的是 Golang 设计模式里最简单的单例模式.单例模式的作用是确保无论对象被实例化多少次,全局都只有一个实例存在.根据这一特 ...

  9. Puppeteer学习笔记 (2)- Puppeteer的安装

    本文链接:https://www.cnblogs.com/hchengmx/p/11009849.html 1. node的下载安装 由于puppeteer是nodejs的一个库,所以首先需要安装no ...

  10. ngx_http_fastcgi_module 的那些事

    是什么? 顾名思义,是Nginx用来处理FastCGI的模块.FastCGI是什么?这个以后再讲,可以说的是现在LNMP架构里面,PHP一般是以PHP-CGI的形式在运行,它就是一种FastCGI,我 ...