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

  • 方式一: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. Wireshark抓包分析TCP“三次握手,四次挥手”

    1.目的 客户端与服务器之间建立TCP/IP连接,我们知道是通过三次握手,四次挥手实现的,但是很多地方对这个知识的描述仅限于理论层面,这次我们通过网络抓包的方式来看一下实际的TCP/IP传输过程. 2 ...

  2. 痞子衡嵌入式:浅谈i.MXRT1xxx系列MCU时钟相关功能引脚的作用

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx系列MCU时钟相关功能引脚作用. 如果我们从一颗 MCU 芯片的引脚分类来看芯片功能,大概可以分为三大类:电源.时钟 ...

  3. Ansible的参数介绍

    安装完成ansible后查看ansible的参数:ansible -h ansible 命令格式:Usage: ansible <host-pattern> [options] ansib ...

  4. 基于SqlSugar的开发框架的循序渐进介绍(1)--框架基础类的设计和使用

    在实际项目开发中,我们可能会碰到各种各样的项目环境,有些项目需要一个大而全的整体框架来支撑开发,有些中小项目这需要一些简单便捷的系统框架灵活开发.目前大型一点的框架,可以采用ABP或者ABP VNex ...

  5. kvm 虚拟化技术 1.2 之配置网络桥接

    实验一:配置网路桥接模式 默认kvm的网络是NAT模式,一般生产环境用桥接模式,把虚拟机改成桥接模式 1.查看是否安装网桥设备 [root@kibana opt]# rpm -qa|grep brid ...

  6. MySQL主从配置及haproxy和keepalived搭建

    本篇文章主要介绍如何搭建MySQL主主配置.主从配置.haproxy.keepalived,已经搭建过程中的一些问题.本次运行环境是在docker中,也会介绍一些docker的知识 docker 小知 ...

  7. 89. Gray Code - LeetCode

    Question 89. Gray Code Solution 思路: n = 0 0 n = 1 0 1 n = 2 00 01 10 11 n = 3 000 001 010 011 100 10 ...

  8. IntelliJ IDEA中如何优雅的调试Java Stream操作

    Stream操作是Java 8推出的一大亮点!虽然java.util.stream很强大,但依然还是有很多开发者在实际工作中很少使用,其中吐槽最多的一个原因就是不好调试,一开始确实是这样,因为stre ...

  9. JVM的类加载过程

    每日一句 人到情多情转薄,而今真个不多情. 每日一句 The frog in the well knows nothing of the great ocean. 井底之蛙,不知大海. JVM 的类加 ...

  10. BZOJ4713 迷失的字符串 解题报告

    BZOJ4713 题目大意:有 \(n\) 个点 \(n-1\) 条边,每条边有一个字符.给你 \(m\) 个字符串 \(s_i\),问每个字符串是否可以通过树上的一条简单路径表示. \(n,m\le ...