掌握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/10/27 11:24:27 阅读更多 →
C 语言嵌入式事件驱动状态机完整教程(枚举配套)

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

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

2026/10/27 11:24:03 阅读更多 →
Java Web开发:内置对象与BOM/DOM解析

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

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

2026/10/24 22:47:58 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/27 4:06:49 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/27 7:21:53 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/27 6:20:47 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/27 4:06:50 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 7:21:50 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →