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 ...
随机推荐
- 爬虫--Scrapy框架的初步使用
1.scrapy在windows环境下安装 - 环境的安装: a. pip3 install wheel b. 下载twisted: http://www.lfd.uci.edu/~gohlke/py ...
- 【PyHacker】编写WAF指纹探测与Sqlmap相结合
使用Python编写探测WAF指纹脚本,再结合到Sqlmap中,这样以后再探测网站时,如果识别到此WAF指纹,就会显示出来.本文属于巡安似海PyHacker系列课程 编写探测识别WAF脚本 00x ...
- 使用C#跨PC 远程调用程序并显示UI界面
在项目中有一个需求是需要在局域网内跨PC远程调用一个程序,并且要求有界面显示,调查了一些资料,能实现远程调用的.Net技术大概有PsExec.WMI.Schedule Task. 这三种方式都做了一个 ...
- IX交换中心网络架构分析
拓扑如上 IX功能介绍 IX交换中心,客户接入交换中心只收取端口费用,在交换中心网内的流量不收取任何费用,一个交换中心是否值得接入主要看该ix所接入的用户 假如客户A是做视频网站,用的视频源是IQY的 ...
- Spring Boot 配置 HikariCP
HikariCP 是一个可靠的.高性能的 JDBC 连接池 本来用的 alibaba/druid,但实际并没有怎么用其内置的监控网页,然后多方调查,决定弃用 druid,替换为 HikariCP Sp ...
- Java 15 新特性:隐藏类
什么是隐藏类 隐藏类,是一种不能被其他类直接使用的类.引入隐藏类的主要目的是给框架来使用,使得框架可以在运行时生成类,并通过反射间接使用它们.可能有点抽象,不要紧,下面我们通过一个例子来直观的认识它! ...
- 数仓选型必列入考虑的OLAP列式数据库ClickHouse(上)
概述 定义 ClickHouse官网地址 https://clickhouse.com/ 最新版本22.4.5.9 ClickHouse官网文档地址 https://clickhouse.com/do ...
- [持续更新] Python学习、使用过程中遇见的非代码层面知识(想不到更好的标题了 T_T)
写在前面: 这篇博文记录的不是python代码.数据结构.算法相关的内容,而是在学习.使用过程中遇见的一些没有技术含量,但有时很令人抓耳挠腮的小东西.比如:python内置库怎么看.python搜索模 ...
- SmartIDE v0.1.18 已经发布 - 助力阿里国产IDE OpenSumi 插件安装提速10倍、Dapr和Jupyter支持、CLI k8s支持
SmartIDE v0.1.18 (cli build 3538) 已经发布,在过去的Sprint 18中,我们集中精力推进对 k8s 远程工作区 的支持,同时继续扩展SmartIDE对不同技术栈的支 ...
- 物联网无线数传通信模块设备常见的几种Modbus网关
物联网无线数传通信常见的几种Modbus网关 以下提到Modbus网关均指Modbus RTU转Modbus TCP,并不涉及对Modbus ASCII数据帧的处理,Modbus ASCII仅支持透明 ...