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

  • 方式一: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. Nginx中FastCGI参数的优化配置实例

    在配置完成Nginx+FastCGI之后,为了保证Nginx下PHP环境的高速稳定运行,需要添加一些FastCGI优化指令.下面给出一个优化实例,将下面代码添加到Nginx主配置文件中的HTTP层级. ...

  2. 【mq】从零开始实现 mq-09-消费者拉取消息 pull message

    前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 [mq]从零 ...

  3. DEDECMS登录后台,无法连接数据库的原因

    在CMS的网页模块中,当迁移网站出现后台无法登录的时候 最可能的情况有下列几种: 1. 数据库服务器宕机.如果是云上的数据库时,需要联系客服进行解决.是有自己的搭建的数据库,需要查看服务是否正常启动 ...

  4. 147_Power BI Report Server demo演示

    焦棚子的文章目录 服务器地址:http://pbirs.jiaopengzi.com/reports 用户名:pbirs 密码:pbirs 分别用pc网页.pc桌面power bi软件以及手机端pow ...

  5. 哈工大软件构造Lab2(2022)

    (防扒小助手) 本人CSDN博客: https://blog.csdn.net/m0_61753302https://blog.csdn.net/m0_61753302本人博客园博客(同步CSDN): ...

  6. Go微服务框架go-kratos实战04:kratos中服务注册和服务发现的使用

    一.简介 关于服务注册和服务发现介绍,我前面的文章有介绍过 - 服务注册和发现的文章. 作为服务中心的软件有很多,比如 etcd,consul,nacos,zookeeper 等都可以作为服务中心. ...

  7. MyBatis - SqlSessionFactory 与 SqlSession

    SqlSessionFactory SqlSessionFactory是创建SqlSession的工厂,一般使用单例模式,不需要重复创建. SqlSession SqlSession是直接与数据库直接 ...

  8. springboot 项目 运行rabbitmq(推送+消费)

    准备 先下载windos版本的mq 「rabbitmq-server-3.9.13.exe」https://www.aliyundrive.com/s/VKB63ghAJZx 点击下载 1启动rabb ...

  9. electron-vue 项目启动动态获取配置文件中的后端服务地址

    前言 最近的项目迭代中新增一个需求,需要在electron-vue 项目打包之后,启动exe 可执行程序的时候,动态获取配置文件中的 baseUrl 作为服务端的地址.electron 可以使用 no ...

  10. VR技术赋能五大领域,不止高级,更高效!

    除了VR游戏.VR影视作品,究竟还有哪些产业领域会应用到VR技术并为生活带来改变呢?今天就帮大家好好梳理一下~ VR赋能交通,不只是高级 最近在网上看到了VR考驾照的新闻,网友都赞叹,现在学车都这么高 ...