当前位置: 首页 > news >正文

开发避坑短篇(10):ArithmeticException无限循环小数的精确处理方案

报错信息

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.at java.base/java.math.BigDecimal.divide(BigDecimal.java:1783)at com.demo.BigDecimalTest.main(BigDecimalTest.java:11)at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)at java.base/java.lang.reflect.Method.invoke(Method.java:580)at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)

异常分析

“Non-terminating decimal expansion”:指除法运算产生无限循环小数。“No exact representable decimal result”:表示无法用有限位小数精确表示该结果‌。这个异常通常在使用BigDecimal进行除法运算时出现,计算结果产生了无限循环小数。当BiaDecimal的divide()方法执行不整除的除法时,如果没有指定精度和舍入模式,会因无法精确表示无限小数而抛出此异常。比如下面就会抛出此异常。

public static void main(String[] args) {System.out.println(new BigDecimal(10).divide(new BigDecimal(3)));
}

解决办法

指定精度和舍入模式。

public static void main(String[] args) {System.out.println(new BigDecimal(10).divide(new BigDecimal(3), 2, RoundingMode.HALF_UP));
}

divide()方法的第2个参数表示保留2位小数,第3个参数为舍入规则,RoundingMode.HALF_UP(四舍五入)是最常用的舍入模式。

http://www.dtcms.com/a/306408.html

相关文章:

  • 地图可视化实践录:显示高德地图和百度地图
  • JavaWeb前瞻—JDBC
  • Rabbitmq中常见7种模式介绍
  • QString 内存机制详解
  • 【Excel】制作双重饼图
  • 恢复IP地址
  • 明远智睿V2H核心模组:工业4.0时代的“性价比革命”
  • 双塔模型 + 自监督学习:解决长尾物品表征难题
  • IBus vs. Fcitx5:一场 Linux 输入法框架的正面交锋
  • Maximum Subarray Sum
  • Redis高可用性
  • CSM7020L 磷酸铁锂电池充电管理的太阳能草坪灯 LED 驱动芯片 SOT23-6封装 带多种反接功能
  • LLM之RAG理论(十八)| ChatGPT DeepResearch 深度研究功能全面技术分析报告
  • 使用Docker 在Rocky Linux 9.5上在线安装Dify
  • 2025年DDoS攻防战:六层防护体系构建业务“数字免疫”
  • 从0开始学linux韦东山教程Linux驱动入门实验班(7)
  • 伦敦招聘数据管道系统设计与实现
  • android-PMS-常见定制场景
  • 【文章浏览 I】
  • 【7】串口编程三种模式(查询/中断/DMA)韦东山老师学习笔记(课程听不懂的话试着来看看我的学习笔记吧)
  • luoguP13511 [KOI P13511 [KOI 2025 #1] 等腰直角三角形
  • S3、SFTP、FTP、FTPS 协议的概念、对比与应用场景
  • vulhub ica1靶场攻略
  • AI框架工具FastRTC快速上手2——整体框架及Stream类详解
  • 浏览器pdf、image显示
  • MaxKB+MinerU:通过API实现PDF文档解析并存储至知识库
  • 虚幻基础:旋转体
  • 在java开发中,错误信息类中定义一个errMap,为什么要在static{}中,put键值对?这是为什么?好处是什么?
  • 嵌入式 C 语言入门:分支结构(if/switch)的用法与硬件控制实践
  • [ java IO ] 文件传输中的输入输出(流)