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 ...
随机推荐
- Python-100-Days-master-第二周笔记
python100day学习第二周 # 通过enumerate函数处理列表之后再遍历可以同时获得元素索引和值 list1 = [1, 3, 5, 7, 100] for index, elem in ...
- Web安全学习笔记 SQL注入中
Web安全学习笔记 SQL注入中 繁枝插云欣 --ICML8 权限提升 数据库检测 绕过技巧 一.权限提升 1. UDF提权 UDF User Defined Function,用户自定义函数 是My ...
- 聊聊FLINK-25631贡献
从入行做数据库开发,到2018年过渡到大数据开发,可以说我已经与sql朝夕相处了七八年了,经常惊讶于简单的语法就能产生复杂的操作,而且还能根据索引等统计信息自动优化,不禁很想实现自己的sql语法,却不 ...
- c# 读取所有磁盘的剩余空间
介绍: 有一个控制台命令是创建指定大小的空文件,因此我想制作一个一键填充剩余磁盘空间的坑人小程序. 想要填充剩余容量,就要先获取所有本地磁盘的剩余空间,这个程序就是用来做这个的. 项目类型为c#控制台 ...
- 运维:DevSecOps
什么是DevSecOps DevSecOps 是一场关于 DevOps 概念实践或艺术形式的变革.DevOps之父Patrick Debios 强调:"DevOps2.0时代应首先解决人的问 ...
- Android开发“HelloWorld”项目
运行截图; 注:在activity_hello_world.xml文件中·可以改变显示内容,如图: 运行截图;
- vue 的个人学习小笔记
一.vite2.0+vue3.0+ts 创建.配置 个人公众号文章地址 个人github仓库地址 1.Vite 创建 vue3 项目: 1.1.npm 常用命令 1.npm 查看版本号 npm vie ...
- vs code nginx php xdebug配置
终于把VSCODE XDEBUG配置搞定了 分享一下 1. VSCODE 安装插件 PHP Debug( Debug supprot for PHP with XDebug); 2. VSCODE ...
- 一文带你搞懂 JWT 常见概念 & 优缺点
在 JWT 基本概念详解这篇文章中,我介绍了: 什么是 JWT? JWT 由哪些部分组成? 如何基于 JWT 进行身份验证? JWT 如何防止 Token 被篡改? 如何加强 JWT 的安全性? 这篇 ...
- html关键字大全
html标签属性大全 html标签属性大全从网上搜集整理的常用html标签,供朋友们交流学习html用. html标签<marquee> <marquee>...</ma ...