掌握Java BigDecimal:精确计算的终极指南
日常工作里, 碰到了需要具备一定精度的计算情况, 在这个时候, 用到了类, 这篇文章记载学习它的运用方法。1.引言在工作中需要用到这是需要使用。先看下面代码( args).out.(0.2 0.1);.out.(0.3 - 0.1);.out.(0.2 * 0.1);.out.(0.3 / 0.1);运行结果如下你觉得你看错了, 然而结果确确实实就是如此。那问题究竟存于何处呢? 缘由在于我们所用的计算机是以二进制运行的。浮点数没办法借助二进制实现精确呈现。我们的CPU对浮点数的表示涵盖两个部分, 分别是指数和尾数, 这般的表示方式通常都会致使精度有所丧失, 部分浮点数运算同样会引发一定的误差情况。举例而言, 2.4的二进制表示并非精准的2.4。相反地, 最为接近它的二进制表示居然是 2.。浮点数的值实际上是通过一个特定的数学公式运算得出的。实际上, java当中的float仅仅能够用以开展科学计算或者工程计算, 于大多数的商业计算里, 通常会采用java.math.类去实施精确计算。2.构造方法1. ( val) 将表示形式转换为 *不建议使用2. (int val) 将int表示形式转换成3. ( val) 将表示形式转换成为什么不建议采用第一种构造方法呢来看例子( args) new (2); new (2.3); new (2.3);.out.( );.out.( );.out.( );运行结果如下为什么会出现这种情况呢描述JDK的情况, 参数类型为的构造方法, 其结果存在必然的不可确切预知特性。有人会觉得, 在Java里写入(0.1)所创建的数值恰好等于0.1 , 也就是非标度值1且标度为1的情况。然而, 实际上它等于0.。这是由于, 0.1没办法精准地被表示成, 或者说针对此情形, 无法被表示成任何具有有限长度的二进制小数。如此一来, 传入到构造方法里的值, 不会恰好等于0.1 , 尽管表面看上去等于这个值。2、另一方面, 构造方法具备完全的可预知性, 将“0.1”写入之后, 会创建出一个状态, 该状态恰好等同于预期的0.1。所以, 两相比较之下, 通常来讲, 优先选用构造方法是较为妥当的做法。在确实需要当作所用到的源之际, 要借助.()去达成转换, 进而借助构造方式, 或者采用其静态方式, 像下面这样。( args) .(2.3); new (.(2.3));.out.( );.out.( );结果如下3.加减乘除运算对于常用的加减乘除类提供了相应的成员方法。add( value);//加法( value);//减法( value);//乘法( value);//除法大概的用法如下( args)a new (4.5);b new (1.5);.out.(a b a.add(b));.out.(a - b a.(b));.out.(a * b a.(b));.out.(a / b a.(b));运行结果这里有一点需要注意的是除法运算.当进行除法运算时, 有可能会出现无法实现整除的情形, 犹如4.5除以1.3这般, 在此时就会产生报错, 报错内容为java.lang.: Non- ; no exact。其实方法有可以传三个参数( , int scale, int )第一参数表示除数第二个参数表示小数点后保留位数在作除法运算或者四舍五入的时候, 才会用到舍入模式, 舍入模式由第三个参数来表示, 舍模式有下面这几种。//向正无穷方向舍入//向零方向舍入//向负无穷方向舍入朝着距离最近的一边进行舍入, 若这两边对应的距离并非相等, 除非两边的距离表现为相等的情形, 要是遇此情况, 沿着向下的方向实施舍入, 就如同1.55保留一位小数后所获结果是1.5。向着距离最近的那一边进行舍入, 不过要排除两边距离相等的情况, 要是这种两边距离相等的情况出现了, 倘若保留的位数属于奇数, 那就采用一种方式, 要是保留位数是偶数, 那就采用另一种方式, 使用相应方式, 有相应使用情况。向着离其最近的那一边进行舍入, 唯有两边的距离并非相等的情形之下才可以, 要是两边的距离相等了, 那就朝着上方进行舍入, 1.55保留一位小数所得到的结果是1.6。//计算结果是精确的不需要舍入模式//向远离0的方向舍入按照各自的需要可传入合适的第三个参数。四舍五入采用需要对进行截断和四舍五入可用方法例( args)a new (4.5635);将a赋值为, 对a进行操作, 保留三位小数, 并且按照四舍五入规则进行处理。.out.(a);*减法、乘法、除法计算, 实际上最后返回的都是一个全新的对象, 这是由于减法运算与乘法运算还有除法运算所涉及的对象都是不可改变状态的那种, 在开展每一步相应运算之际, 都必然会生成一个全新的对象。( args)a new (4.5);b new (1.5);a.add(b);.out.(a); 此操作会输出4.5 , 加减乘除相应方法会返回名为一个新的对象, 并且原来的a保持不变。4.总结(1)商业计算使用。(2)尽量使用参数类型为的构造函数。(3) 所有皆是不可改变的那种情况在开展每一步运算期间均会生成一个全新对象故而于做加减乘除运算之际务必得妥善留存操作之后的数值。(4)我们常常易于忽视JDK基础层面的某些达成细微之处, 致使产生差错, 应当予以更多留意。

相关新闻

零代码微调本地大模型:LLaMA-Factory与Ollama实战指南

零代码微调本地大模型:LLaMA-Factory与Ollama实战指南

1. 项目概述:为什么“无代码”微调本地LLM现在变得触手可及? 几年前,想自己动手微调一个大语言模型,门槛高得吓人。你得是机器学习专家,熟悉PyTorch或TensorFlow的底层API,能熟练处理分布式训练&#xff0c…

2026/9/23 1:53:30 阅读更多 →
C 语言嵌入式事件驱动状态机完整教程(枚举配套)

C 语言嵌入式事件驱动状态机完整教程(枚举配套)

目录 前言 一、状态机四大核心要素 二、枚举搭配状态机的四大工程硬性优势 三、工业通用完整示例(事件驱动状态机) 代码分层设计思路 四、核心答疑:操作结构体为什么统一使用 StateMachine *sm 指针? 扩展小节:…

2026/9/25 22:09:02 阅读更多 →
Java Web开发:内置对象与BOM/DOM解析

Java Web开发:内置对象与BOM/DOM解析

1. 项目概述:Java内置对象与浏览器对象模型解析 作为Java Web开发的基础核心内容,内置对象与BOM/DOM操作是每个开发者必须掌握的技能点。我在实际教学和项目开发中发现,很多初学者虽然能写出基础功能,但对这些对象体系的底层逻辑和…

2026/9/25 12:08:25 阅读更多 →

最新新闻

校园论文选题系统开发实战:Laravel+uniapp+微信小程序

校园论文选题系统开发实战:Laravel+uniapp+微信小程序

毕业论文选题,每年春季都是高校信息部门最头疼的环节。纸质表格传阅、Excel来回汇总、学生线下找老师签字协调,一套流程走下来少说两周,还免不了各种重复和错漏。后来我接手了一个校园团队的项目,用 Thinkphp/Laravel 作为后端、u…

2026/9/25 22:08:45 阅读更多 →
zvec-grep混合搜索原理揭秘:BM25、向量检索与ripgrep如何用RRF融合排名

zvec-grep混合搜索原理揭秘:BM25、向量检索与ripgrep如何用RRF融合排名

zvec-grep混合搜索原理揭秘:BM25、向量检索与ripgrep如何用RRF融合排名 【免费下载链接】zvec-grep Local-first search across your workspace, built for humans and AI agents. 项目地址: https://gitcode.com/gh_mirrors/zv/zvec-grep zvec-grep&#xf…

2026/9/25 22:08:45 阅读更多 →
SpringBoot+Vue 实现办公用品管理系统|计算机毕设源码讲解

SpringBoot+Vue 实现办公用品管理系统|计算机毕设源码讲解

💖💖作者:计算机毕业设计小明哥 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包…

2026/9/25 22:07:44 阅读更多 →
Python Assert 语句

Python Assert 语句

我们要去搞明白, 到底什么叫做断言。断言是程序里用来坚定地声明或表明某个事实的语句。比如在编一个除法的函数时, 你内心非常确定, 那个除数是不应该等于零的, 所以你就发出了断言, 说明这个除数不是零。断言仅仅只是一个布尔表达式, 它的作用是用来检查某个具体的条件有没有…

2026/9/25 22:07:44 阅读更多 →
阿里云 300万美金加入 Linux 基金会 Alibaba Cloud joins as a Founding Corporate Patron with $3 million

阿里云 300万美金加入 Linux 基金会 Alibaba Cloud joins as a Founding Corporate Patron with $3 million

阿里巴巴云正式加入 Omacom 基金会,成为创始企业赞助人,承诺每年出资 100 万美元,连续三年!这意味着总计 300 万美元的投入,与 DigitalOcean 的赞助金额持平,将全部用于 Omarchy 的开发、维护与推广。 但这…

2026/9/25 22:06:44 阅读更多 →
云服务器怎么搭建python环境变量管理系统

云服务器怎么搭建python环境变量管理系统

要搭建一个系统用来管理环境变量这事儿, 它并不是简简单单就能弄好的, 你首先得具备一定的基础知识储备, 并且还要有一定的编程实际操作经验才行;接下来这儿有一个非常基础的系统框架可以摆在你的面前供你看一看, 这个框架可不是固定不变的死规矩, 它是可以根据你自…

2026/9/25 22:06:44 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →