Java 中怎么解决 0.1 + 0.2 不等于 0.3?

👆🏻👆🏻👆🏻关注博主,让你的代码变得更加优雅。

前言

Hutool 是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

官网:https://www.hutool.cn/

推荐说明

数字工具针对数学运算做工具性封装

最佳实践

引入pom


<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><!-- 请查看最新版本 https://mvnrepository.com/artifact/cn.hutool/hutool-all --><version>5.8.26</version>
</dependency>

加减乘除

  • **NumberUtil.add** 针对数字类型做加法
  • **NumberUtil.sub** 针对数字类型做减法
  • **NumberUtil.mul** 针对数字类型做乘法
  • **NumberUtil.div** 针对数字类型做除法,并提供重载方法用于规定除不尽的情况下保留小数位数和舍弃方式。

以上四种运算都会将double转为BigDecimal后计算,解决float和double类型无法进行精确计算的问题。这些方法常用于商业计算。

保留小数

保留小数的方法主要有两种:

  • **NumberUtil.round** 方法主要封装BigDecimal中的方法来保留小数,返回BigDecimal,这个方法更加灵活,可以选择四舍五入或者全部舍弃等模式。
double te1 = 123456.123456;
double te2 = 123456.128456;
Console.log(round(te1,4));//结果:123456.1235Console.log(round(te2,4));//结果:123456.1285
  • **NumberUtil.roundStr** 方法主要封装**String.format**方法,舍弃方式采用四舍五入。
double te1 = 123456.123456;
double te2 = 123456.128456;
Console.log(roundStr(te1,2));//结果:123456.12Console.log(roundStr(te2,2));//结果:123456.13

decimalFormat

针对 **DecimalFormat.format**进行简单封装。按照固定格式对double或long类型的数字做格式化操作。

long c = 299792458;//光速
String format = NumberUtil.decimalFormat(",###", c);//299,792,458

格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。

关于格式的更多说明,请参阅:Java DecimalFormat的主要功能及使用方法

是否为数字

  • **NumberUtil.isNumber** 是否为数字
  • **NumberUtil.isInteger** 是否为整数
  • **NumberUtil.isDouble** 是否为浮点数
  • **NumberUtil.isPrimes** 是否为质数

随机数

  • **NumberUtil.generateRandomNumber** 生成不重复随机数 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组。
  • **NumberUtil.generateBySet** 生成不重复随机数 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组。

整数列表

**NumberUtil.range** 方法根据范围和步进,生成一个有序整数列表。 **NumberUtil.appendRange** 将给定范围内的整数添加到已有集合中

其它

  • **NumberUtil.factorial** 阶乘
  • **NumberUtil.sqrt** 平方根
  • **NumberUtil.divisor** 最大公约数
  • **NumberUtil.multiple** 最小公倍数
  • **NumberUtil.getBinaryStr** 获得数字对应的二进制字符串
  • **NumberUtil.binaryToInt** 二进制转int
  • **NumberUtil.binaryToLong** 二进制转long
  • **NumberUtil.compare** 比较两个值的大小
  • **NumberUtil.toStr** 数字转字符串,自动并去除尾小数点儿后多余的0

写在最后

给大家推荐一个非常完整的Java项目搭建的最佳实践,也是本文的源码出处,由大厂程序员&EasyExcel作者维护。
github地址:https://github.com/zhuangjiaju/easytools
gitee地址:https://gitee.com/zhuangjiaju/easytools

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/47159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git回退分支版本git reset --hard HEAD

git回退分支版本git reset --hard HEAD git reset --hard HEAD 上面命令清除本地所有修改&#xff0c;与下面相似&#xff1a; git reset --hard origin/master 等同于&#xff1a; git reset --hard HEAD~0 说明&#xff1a; HEAD 当前版本 HEAD^ 上一个版本 HEAD^^ 上上…

单例模式 饿汉式和懒汉式的区别

单例模式&#xff08;Singleton Pattern&#xff09;是设计模式中最简单、最常见、最容易实现的一种模式。它确保一个类仅有一个实例&#xff0c;并提供一个全局访问点。单例模式主要有两种实现方式&#xff1a;饿汉式&#xff08;Eager Initialization&#xff09;和懒汉式&am…

Linux - 冯-诺依曼体系结构、初始操作系统

目录 冯•诺依曼体系 结构推导 内存提高效率的方法 数据的流动过程 体系结构相关知识 初始操作系统 定位 设计目的 操作系统之上之下分别有什么 管理精髓&#xff1a;先描述&#xff0c;再组织 冯•诺依曼体系 结构推导 计算机基本工作流程图大致如下&#xff1a; 输入设备&a…

支付宝低代码搭建电商小程序,无需编程,可视化操作

大家好&#xff0c;我是小悟 在数字化浪潮的推动下&#xff0c;为了更快速、高效地搭建电商小程序&#xff0c;支付宝低代码平台凭借其独特优势&#xff0c;为商家提供了便捷的解决方案。 支付宝低代码平台犹如一座精心打造的智慧工坊&#xff0c;让电商小程序的搭建变得轻而易…

Excel办公技巧:制作二级联动下拉菜单

分享制作二级联动下拉菜单的方法&#xff0c;即使数据有增删&#xff0c;菜单也能自动更新&#xff01; 可以通过先定义名称&#xff0c;再结合数据验证&#xff0c;来做二级联动下拉菜单。 1. 准备数据 首先&#xff0c;我们需要准备好要进行二级联动下拉菜单的数据&#xff…

在 Linux 系统中安装MySQL 8.x(Ubuntu和CentOS)

文章目录 0. 前言1. 查看 Linux 的发行版本2. 在 Ubuntu 中安装MySQL 8.x2.1 更新包索引2.1.1 更改 Ubuntu 的镜像源2.1.2 更新软件包、升级软件包&#xff08;耗时可能较长&#xff09;2.1.3 可能遇到的问题 2.2 安装MySQL2.3 安全配置2.3.1 密码安全级别2.3.2 删除匿名用户2.…

6.Dockerfile及Dockerfile常用指令

Dockerfile是构建docker镜像的脚本文件 Dockerfile有很多的指令构成&#xff0c;指令由上到下依次运行。 每一条指令就是一层镜像&#xff0c;层越多&#xff0c;体积就越大&#xff0c;启动速度也越慢 井号开头的行是注释行。指令写大写写小写都行&#xff0c;但一般都写为…

ubuntu上通过修改grub启动参数,将串口重定向到sol

要修改 GRUB 启动参数以实现串口重定向到 Serial Over LAN (SOL)&#xff0c;你需要编辑 /etc/default/grub 文件&#xff0c;并更新 GRUB 配置。这里是详细步骤&#xff1a; 1. 编辑 /etc/default/grub 打开终端并使用文本编辑器&#xff08;如 nano 或 vim&#xff09;编辑…

介绍 Elasticsearch 中的 Learning to Tank - 学习排名

作者&#xff1a;来自 Elastic Aurlien Foucret 从 Elasticsearch 8.13 开始&#xff0c;我们提供了原生集成到 Elasticsearch 中的学习排名 (learning to rank - LTR) 实现。LTR 使用经过训练的机器学习 (ML) 模型为你的搜索引擎构建排名功能。通常&#xff0c;该模型用作第二…

关于Flume和Flink

看起来都能处理实时数据 想象一下你家的厨房&#xff0c;Flume就像是那个负责把食材从冰箱里取出来、清洗干净、切好并准备好放在砧板上的厨师助手。而Flink则像是那个真正的主厨&#xff0c;他拿到准备好的食材&#xff0c;开始烹饪&#xff0c;加入调料&#xff0c;做出美味…

谈人工智能在电子档案系统的应用

引言 随着人工智能技术的飞速发展&#xff0c;其在电子档案系统中的应用正逐渐成为学术研究和实际应用的热点。本文旨在探讨人工智能在电子档案系统中的应用现状、优势以及面临的挑战&#xff0c;并展望未来的发展方向。通过分析当前档案管理面临的挑战&#xff0c;以及人工智…

nginx代理缓存

在服务器架构中&#xff0c;反向代理服务器除了能够起到反向代理的作用之外&#xff0c;还可以缓存一些资源&#xff0c;加速客户端访问&#xff0c;nginx的ngx_http_proxy_module模块不仅包含了反向代理的功能还包含了缓存功能。 1、定义代理缓存规则 参数详解&#xff1a; p…

PX4 1.14 Ubuntu22.04 ROS2 Humble 虚拟机镜像 下载

仿真测试视频&#xff1a; px4 ubuntu22.04 test 下载地址&#xff08;付费内容&#xff0c;不能接受请勿下载&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1YTK4AQj7MRBo3-xX2s_76Q?pwdrmsg 提取码&#xff1a;rmsg

vue2使用g6,G6

1安装 cnpm install --save antv/g63.4.82、代码&#xff0c;简单使用 <template><div>3333<div id"mountNode"></div></div> </template> <script> import G6 from antv/g6 export default {data() {return {}},comput…

减分虎-交管12123学习题目及答案

学法减分是对驾驶证已经存在的记分进行减免&#xff0c;并不是给驾驶证进行加分&#xff0c;不是代替违章扣分。学法免费获取的分值正是对扣分记录的清除。比如违章被扣6分&#xff0c;通过学法免分考试把6分清空重新开始。 学法减分政策为驾驶员提供了一次难得的加分机会。然而…

WordPress 6.6 “Dorsey多尔西”发布

WordPress 6.6 “Dorsey多尔西”已经发布&#xff0c;它以传奇的美国大乐队领袖 Tommy Dorsey 名字命名。Dorsey 以其音调流畅的长号和作品而闻名&#xff0c;他的音乐以其情感深度和充满活力的能量吸引了观众。 当您探索 WordPress 6.6 的新功能和增强功能时&#xff0c;让您的…

MBR40150FCT-ASEMI无人机专用MBR40150FCT

编辑&#xff1a;ll MBR40150FCT-ASEMI无人机专用MBR40150FCT 型号&#xff1a;MBR40150FCT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 批号&#xff1a;最新 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;40A 最大循环峰值反向电压&#xff08;VRRM&a…

部署kafkamanager

1&#xff0c;检查kafka的版本 到lib下查看 libs/kafka-clients-0.11.0.3.jar kafka的版本 0.11 2&#xff0c;下载kafkamanager 链接&#xff1a; https://pan.baidu.com/s/1qYifoa4 密码&#xff1a;el4o 3&#xff0c;解压后更改该conf下conf/application.conf 中zkhosts …

论文翻译 | Successive Prompting for Decomposing Complex Questions 分解复杂问题的连续提示

摘要 回答需要做出潜在决策的复杂问题是一项具有挑战性的任务&#xff0c;尤其是在监督有限的情况下。 最近的研究利用大型语言模型&#xff08;LMs&#xff09;的能力&#xff0c;在少量样本设置中通过展示如何在单次处理复杂问题的同时输出中间推理过程&#xff0c;来执行复杂…

2024年金航标和萨科微扩张

近年电子信息产业链的外迁和世界经济的低迷&#xff0c;各行各业都很卷&#xff0c;加班加点但业绩负增长是常态&#xff0c;互联网大厂阿里巴巴大裁员、字节跳动裁到了大动脉、京东刘强东抛弃躺平的兄弟、深圳华强北做电子元器件的老板老板娘们一脸茫然&#xff0c;周围都弥漫…