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

  • 方式一: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. zabbix 线路质量监控自定义python模块,集成ICMP/TCP/UDP探测,批量监控线路质量自定义阈值联动mtr保存线路故障日志并发送至noc邮箱

    互联网故障一般表现为丢包和时延增大,持续性故障不难排查,难的是间歇性或凌晨故障,后者往往来不及等我们测试就已经恢复正常,得不到异常时的mtr无法判断故障点在哪里 故此有了根据丢包率和时延变换联动mtr ...

  2. 152-技巧-Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv

    152-技巧-Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv 附件下载地址:https://jiaopengzi.com/2602.html 一.背景 在我们使用 ...

  3. Fail2ban 安装Fail2ban到Ubuntu

    系统版本:Ubuntu 16.04.5 LTS 软件版本:fail2ban-0.9.3 硬件要求:无 1.安装Fail2ban root@local:~# apt-get update root@lo ...

  4. Python模块Ⅱ

    Python模块2 part3 模块的分类: 内置模块200种左右:python自带的模块,time os sys hashlib等 第三方模块6000种左右:需要pip install beauti ...

  5. 使用argparse进行调参

    argparse是深度学习项目调参时常用的python标准库,使用argparse后,我们在命令行输入的参数就可以以这种形式python filename.py --lr 1e-4 --batch_s ...

  6. uni-simple-router

    目录 uni-simple-router 一.快速上手 扩一:webpack插件之DefinePlugin 扩二:uni-read-pages 如何获取pages.json中的路由 二.H5模式 2. ...

  7. Linux 运行升讯威在线客服系统:同时支持 SQL Server 和 MySQL 的实现方法

    前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程. 有很多朋友一直提出希望能够支持 MySQL 数据库,考虑到已经有朋友在用 SQL Server,我在升级的过程中 ...

  8. vue-cli2.x配置build命令构建测试包&正式包

    项目开发中常分为开发环境.测试环境.正式环境 通过vue-cli或者@vue/cli脚手架搭建的项目默认提供了开发环境和正式环境的配置.可通过js获取当前域名或其他信息来判断当前为测试环境还是正式环境 ...

  9. 代码调用Rally的接口介绍

    1. 支持的语言 2. 创建APIKey 3. GetRequest 4. QueryRequest 5. CreateRequest 6. 参考资料 本文链接: https://www.cnblog ...

  10. Colab教程(超级详细版)及Colab Pro/Colab Pro+使用评测

    在下半年选修了机器学习的关键课程Machine learning and deep learning,但由于Macbook Pro显卡不支持cuda,因此无法使用GPU来训练网络.教授推荐使用Goog ...