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字符串类型数学运算表达式以及精度丢失问题的更多相关文章
- java 解析四则混合运算表达式并计算结果
package ch8; import java.util.LinkedList; import java.util.List; import java.util.Stack; /** * 四则混合运 ...
- C#数学运算表达式解释器
C#数学运算表达式解释器 測试文件内容: a=2+3*2; b=2*(2+3); 浏览按钮事件处理程序: private void button_browse_Click(object sender, ...
- Java基本类型与运算
问题及答案来源自<Java程序员面试笔试宝典>第四章 Java基础知识 4.4基本类型与运算 1.Java提供了哪些基本数据类型? Java一共提高了八种原始的数据类型:byte.shor ...
- java 字符串类型String
在本质上,字符串实际上一个char类型的数组,由java.lang.String类来表示,该类具有一系列的属性和方法,提供对字符串的一些操作.除此之外,java还提供了StringBuffer类来处理 ...
- Java中的数学运算BigDecimal
Math类 package ch7; /** * Created by Jiqing on 2016/11/24. */ public class MathDemo { public static v ...
- Java字符串类型详解
Java 字符串类主要有String.StringBuffer.StringBuilder.StringTokenizer 1.字符串类型底层都是使用char数组进行实现. 2.从jdk1.7以后,S ...
- 后端将Long类型数据传输到前端出现精度丢失的问题
当将超过16位的数字传输到前端的时候,就会出现精度丢失的问题,然后我按照网上的几种方法实验的时候,只有一种方法成功了.可能是因为环境等方面的问题. 我这里成功是因为:最后使用的是配置mvc的方式,然后 ...
- 面试问题-使用Java线程做数学运算
这是一个展示如何使用join()方法的例子. 问题: 使用Java多线程计算表达式1*2/(1+2)的值. 解决方案: 使用一个线程做加法运算,另一个线程做乘法运算,还有一个主线程main做除法运算. ...
- java字符串类型和时间类型的转换
类型转换 //reqeust.getParameter获取字符串直接赋值 1 public static Date date(String date_str) { try { Calendar zca ...
随机推荐
- ElasticSearch7.3学习(二十四)----相关度评分机制详解
1.算法介绍 relevance score(相关性分数) 算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度.Elasticsearch使用的是 term freque ...
- 一窥 AJAX
一窥 AJAX 本文写于 2020 年 6 月 7 日 AJAX 这个词非常常见,如果使初学者,说不定还会非常害怕这个名字看起来非常高端.非常难的技术. AJAX,全称 Async JavaScrip ...
- install dns server on ubuntu
参考 CSDN/Ubuntu环境下安装和配置DNS服务器 在 Ubuntu 上安裝 DNS server Install BIND 9 on Ubuntu and Configure It for U ...
- 零基础学Java第一节(语法格式、数据类型)
本篇文章是<零基础学Java>专栏的第一篇文章,从本篇文章开始,将会连更本专栏,带领大家将Java基础知识彻底学懂,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! ...
- 监控工具:nmon
软件介绍 分析工具 分析 AIX 和 Linux 性能的免费工具, 这个高效的工具可以工作于任何哑屏幕.telnet 会话.甚至拨号线路.另外,它并不会消耗大量的 CPU 周期,通常低于百分之二. ...
- 129_Power Pivot&Power BI DAX不同维度动态展示&动态坐标轴
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 某天在和那还是叫我大铁吧 交流关于季度&月度同时展示的问题,感概中国式报表真的需求很微妙. 下面来看看到 ...
- elementUI 输入框用户名和密码取消自动填充
<!-- 用户名取消自动填充 autocomplete="off" --> <el-form-item label="用户名" prop=&q ...
- C++primer第一章
第一章 : 开始 1.1 编写一个简单的C++程序 要点:每个函数有且只能拥有一个main函数,且main的默认返回是一个int类型. 函数定义:返回类型,函数名,形参列表,函数体 1.1.1编译 运 ...
- 给王心凌打Call的,原来是神奇的智能湖仓
图文原创:谭婧(王凌老粉) "爷青回" "我们只是老了,并没有死." 谭老师作为老粉,热烈庆祝"甜心教主"王凌成为现象级翻红顶流. 只要地球 ...
- 【Srping】事务的执行原理(一)
在使用事务的时候需要添加@EnableTransactionManagement注解来开启事务,那么就从@EnableTransactionManagement入手查看一下事务的执行原理. @Enab ...