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 ...
随机推荐
- web安全之自己写一个扫描器
web安全之自己写一个扫描器 自己来写一个简单的目录扫描器,了解扫描器的运转机制和原理,因为python写脚本比较容易所以用python写一个网站目录扫描器. 第一步:我们需要导入所需要的库 1 im ...
- font-family样式对照表
.a { font-family: "微软雅黑" } .b { font-family: "黑体" } .c { font-family: "楷体&q ...
- NLP教程(6) - 神经机器翻译、seq2seq与注意力机制
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...
- .NET混合开发解决方案12 网页JS调用C#方法访问WinForm或WPF窗体
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- 强制20天加班开发app后被集体解雇,象寻技术负责人公众号发文怒斥前领导
5月16日下午三点,象寻官方公众号发了一篇<祝象寻早日倒闭的文章>文章,文章配一个竖中指的手势.如此劲爆的文章瞬间引爆了微信朋友圈,大家纷纷分享给好友和微信群,阅读量也达到了十万+. 当时 ...
- 组织:EFF
电子前沿基金会(Electronic Frontier Foundation), 简称EFF,是一个非营利性的国际法律组织.该组织成立于1990年,创始人包括Mitch Kapor(Lotus公司的总 ...
- C# .NET ML.NET 机器学习 图像分类
一. 准备工作 IDE是 VS2019.先下载好"resnet_v2_50_299.meta"这个文件,放入"C:\Users\jk\AppData\Local\Temp ...
- 【freertos】009-任务控制
目录 前言 9.1 相对延时 9.1.1 函数原型 9.1.2 函数说明 9.1.3 参考例子 9.2 绝对延时 9.2.1 函数原型 9.2.2 函数说明 9.2.3 参考例子 9.3 获取任务优先 ...
- 队列的java实现
今天老师提出一个问题,就是如何用java实现队列呢?我在网上找了许多资料,发现java也是可以很轻松的实现队列. 如下代码: package com; import java.util.Collect ...
- 配置中心的设计-nacos vs apollo
简介 前面我们分析了携程的 apollo(见 详解apollo的设计与使用),现在再来看看阿里的 nacos. 和 apollo 一样,nacos 也是一款配置中心,同样可以实现配置的集中管理.分环境 ...