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执行此表达式出错,无法执行此表达式");
- }
-
- }
- }
- import cn.hutool.core.math.Calculator;
执行结果:
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 ...
随机推荐
- 国内访问 git 慢的方法
在国内访问 git 的时候,总会存在访问慢或者git clone 的时候报下面的错误 这个时候,我们可以使用代理的方式去进行访问 需要注意的是:你必须存在一个国外的,能够让你快速访问到 GitHub ...
- WPF 分组
分组和树形结构是不一样的. 树形结构是以递归形式存在.分组是以键值对存在的形式,类似于GroupBy这样的形式. 举个例子 ID NAME SEX Class 1 张三 男 1 2 李四 女 2 3 ...
- DeepPrivacy: A Generative Adversarial Network for Face Anonymization阅读笔记
DeepPrivacy: A Generative Adversarial Network for Face Anonymization ISVC 2019 https://arxiv.org/pdf ...
- There appears to be trouble with your network connection. Retrying…
yarn 错误There appears to be trouble with your network connection. Retrying- 原因:yarn超时 解决途径: #查看代理 yar ...
- 每天一个 HTTP 状态码 200
200 OK 话不多说,这个状态码应该是最最最常用的了,无人不知,无人不晓: 就是表示请求成功的意思,你若安好,便是晴天. 摘自对于 https://www.google.com/ GET 请求的响应 ...
- Android 子线程 UI 操作真的不可以?
作者:vivo 互联网大前端团队- Zhang Xichen 一.背景及问题 某 SDK 有 PopupWindow 弹窗及动效,由于业务场景要求,对于 App 而言,SDK 的弹窗弹出时机具有随机性 ...
- 关于JNPF3.4版本的三大改变,你真的了解了吗?
- 用STM32玩L298N(正反转、调速)
目录 用STM32玩L298N(正反转.调速) 控制直流电机正反转 使用PWM调速 用STM32玩L298N(正反转.调速) 开发板:STM32F103ZET6(正点原子F103核心板)/STM32F ...
- CVE-2022-30190 Follina Office RCE分析【附自定义word钓鱼模板POC】
昨天看了下'Follina' MS-MSDT n-day Microsoft Office RCE 这个漏洞,修改了下chvancooten的脚本,实现可以自定义word模板,便于实战中钓鱼使用,自己 ...
- ABP Framework 5.3.0 版本新增功能和变更说明
ABP Framework 5.3.0 稳定版已在2022年6月14日正式发布. 以下是本版本的新增功能: "开始"页面提供创建单层项目选项 启动模板提供 PWA 支持 Volo. ...