Bigdecimal 除法用法

Bigdecimal 除法使用引言

在开发中遇到了一个Bigdecimal的问题,在此记录一下。

ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.距离如下图。

        // 问题代码BigDecimal result = BigDecimal.ONE.divide(new BigDecimal(3));// 修改代码BigDecimal result = BigDecimal.ONE.divide(new BigDecimal(3),5,BigDecimal.ROUND_HALF_DOWN);

解决方法:指定其保留位数。见修改代码。

原因刨析:

        代码中使用了 BigDecimal 做精确计算,在做除法时,系统抛出 “ Non-terminating decimal expansion; no exact representable decimal result”。

        因为BigDecimal 是不可变的、任意精度的有符号十进制数,所以可以做精确计算。但在除法中,准确的商可能是一个无限长的十进制扩展;例如,1 除以 3 所得的商。我们在做除法时,没有指定舍入模式,并且无法表示为准确的结果,因此抛出了这个异常(java.lang.ArithmeticException)。

 BigDecimal 除法运算常见问题

  1. ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.:这个异常通常发生在除法运算得到一个无限循环小数的情况下。例如,当尝试用 BigDecimal 表示 1 除以 3 时,会导致这个异常。解决方法包括使用合适的精度和舍入模式,或者采取其他策略来处理无限循环小数。

  2. ArithmeticException: Division by zero:这个异常会在除数为零时抛出。当除数为零时,无法进行有效的除法运算,因此会抛出这个异常。在进行除法运算前,应该先验证除数是否为零,避免出现这个异常。

  3. NumberFormatException:这个异常可能在使用 BigDecimal 的字符串构造器时出现,如果字符串不是有效的数字表示形式,会导致这个异常。在使用字符串构造器创建 BigDecimal 对象时,需要确保提供的字符串是合法的数字格式。

  4. NullPointerException:在调用 divide 方法时,如果传入的参数为 null,会导致这个异常。因此,在进行除法运算时,需要确保被除数和除数都不为 null。

 BigDecimal 除法运算注意事项

在使用 BigDecimal 进行除法运算时,有几个注意事项需要特别注意:

  1. 使用正确的精度和舍入模式:在进行除法运算时,需要考虑到被除数和除数的精度,并且选择合适的舍入模式。Java 中的 BigDecimal 类提供了多种舍入模式,比如 ROUND_UPROUND_DOWNROUND_HALF_UP 等。根据具体需求选择合适的精度和舍入模式非常重要。

  2. 处理除数为零的情况:使用 BigDecimal 进行除法时,需要注意被除数不能为零。如果尝试用零来做除数,会抛出 ArithmeticException 异常。因此,在进行除法运算前,最好先验证除数是否为零,避免出现异常。

  3. 处理无限循环小数:对于某些除法运算,可能会出现无限循环小数,比如 1 除以 3。在这种情况下,如果不限制小数部分的位数,可能会导致计算结果无法表示或者无限长。因此,在实际应用中,需要考虑如何处理无限循环小数,比如设置合适的精度、舍入模式或者采取其他策略来处理这种情况。

  4. 考虑异常情况:当使用 BigDecimal 进行除法运算时,需要考虑各种异常情况,比如除数为零、输入数据异常等,确保代码能够正确处理这些情况,避免出现不可预料的错误。

        总之,在使用 BigDecimal 进行除法运算时,需要特别注意精度、舍入模式、异常情况和除数为零的情况,以确保计算结果的准确性和代码的健壮性。

RoundingMode 八种舍入模式

更多消息资讯,请访问昂焱数据。

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

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

相关文章

Windows下使用Airsim+QGC进行PX4硬件在环HITL(一)

Windows下使用AirsimQGC进行PX4硬件在环HITL This tutorial will guide you through the installation of Airsim and QGC on Windows, so that the hardware-in-the-loop experiment can be conducted. Hardware-in-the-Loop (HITL or HIL) is a simulation mode in which nor…

ECharts 图形化看板 模板(简单实用)

目录 一、官网 二、模板 ①定义请求​编辑 ② 将请求统一管理,别的页面引用多个请求时更便于导入。​编辑 ③最终模板 三、执行效果 四、后端代码 4.1 controller 4.2 xml 4.3 测试接口 一、官网 获取 ECharts - 入门篇 - 使用手册 - Apache ECharts 二、…

PySpark特征工程(III)--特征选择

有这么一句话在业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。 特征工程是数据分析…

化学化工领域科技查新点提炼方法!--附案例

化学化工领域,严格地讲应该是化学化工领域,一个侧重理论,一个侧重应用。者发展非常成熟,学科划分细致,在研究上共性很多,所以,这里我们结合查新课题的特点将其合并在一个专题下进行讨论。 从查…

结构体+结构体内存对齐+结构体实现位段

结构体内存对齐实现位段 一.结构体1.结构体的声明2.结构体变量成员访问操作符3.结构体传参4.匿名结构体5.结构的自引用 二.结构体内存对齐1.对齐规则2.为什么存在内存对齐?3.修改默认对齐数 三.结构体实现位段1.什么是位段2.位段的内存分配3.位段的跨平台问题4.位段…

ARM32开发——串口库封装(初级)

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 开发流程分组创建 接口定义完整代码 开发流程 在文件系统中,创建库目录Library在keil工程中,创建分组管理…

Warning:成交前,永远相信意外即将发生

作为一名首次次创业者,随着创业进入深层次阶段,越来越感觉到:创业是一条不归路,因为路上不止有惊喜,还有风尘。创业之前我认为世界是“天圆地方”的, 创业后你猜我怎么看这个世界的? 创业前我一…

B端数据看板,其实数据可以更美的。

B端数据看板可以通过设计来提升其美观度。 色彩和配色方案: 选择适合品牌和数据类型的色彩搭配方案。使用渐变色、明亮的色调和对比度来突出重要的数据指标。 数据可视化: 使用图表、图形和数据图像来呈现数据,使其更易于理解和解读。选择…

牛客ONT45 距离是K的二叉树节点【中等 宽度优先遍历 Java/Go/PHP/C++】

题目 题目链接: https://www.nowcoder.com/practice/e280b9b5aabd42c9b36831e522485622 思路 图,队列 构件图,直接从target出发,扩展到第k层就是答案Java代码 import java.util.*;/** public class TreeNode {* int val 0;* …

第十五届蓝桥杯物联网试题(国赛)

好,很好,国赛直接来个阅读理解,我猛做4个小时40分钟,cpu都干冒烟了,也算是勉强做完吧,做的很仓促,没多检查就交了,方波不会,A板有个指示灯没做,其他应该都还凑…

云原生下的数据协调艺术:etcd存储系统解析

目录 一、分布式存储简介 二、etcd介绍 三、etcd架构 四、etcd集成实践 一、分布式存储简介 随着云原生与容器化技术的兴起,分布式系统的复杂性大大增加。分布式系统面临一系列问题,比如部署复杂、响应时间慢、运维复杂等,其中最根本的问…

NVIDIA JetPack 6.0(现已正式发布)

NVIDIA JetPack 6.0(现已正式发布) NVIDIA JetPack SDK 为 NVIDIA Jetson 模块提供支持,为构建端到端加速 AI 应用程序提供全面的解决方案。JetPack 6 通过微服务和一系列新功能扩展了 Jetson 平台的灵活性和可扩展性。它是 2024 年下载次数最…

CodeMirror 创建标签计算编辑器

在日常开发中对于一些数据计算场景可能会遇到标签计算的需求&#xff0c;下面关于如何使用CodeMirror实现标签计算编辑功能。 1&#xff0c;结果图 2&#xff0c;主体代码逻辑 大家只需要复制粘贴主要codeMirror使用逻辑即可 <template><el-dialogref"dialogRe…

python——网络编程

流程图 面向连接的套接字 面向连接的通信提供序列化的、可靠的和不重复的数据交付&#xff0c;而没有记录边界。主要的协议是传输控制协议&#xff08;TCP&#xff09;; TCP套接字&#xff0c;在python中&#xff0c;必须使用SOCK_STREAM作为套接字类型 tcp的特点 面向连接…

AI大模型应用开发实践:5.快速入门 Assistants API

快速入门 Assistants API Assistants API 允许您在自己的应用程序中构建人工智能助手。一个助手有其指令,并可以利用模型、工具和知识来回应用户查询。 Assistants API 目前支持三种类型的工具: 代码解释器 Code Interpreter检索 Retrieval函数调用 Function calling使用 P…

数据结构学习笔记

参考教材&#xff1a;数据结构C语言版&#xff08;严蔚敏&#xff0c;杨伟民编著&#xff09; 参考课程&#xff1a;青岛大学王卓老师&#xff1a;数据结构与算法基础 思维导图&#xff1a;XMind、幕布 正在备考&#xff0c;结合自身空闲时间&#xff0c;不定时更新&a…

Three.js的阴影技术,创建逼真效果的必备!

three.js是一个流行的用于创建和展示3D图形的JavaScript库&#xff0c;它提供了多种阴影技术来增强3D场景的真实感和视觉效果。 一、常用阴影技术 1. 基于光线的阴影&#xff08;Raytraced Shadows&#xff09;&#xff1a;通过跟踪光线的路径来计算阴影&#xff0c;产生非常…

大数据之CDH对Hdfs做Balance数据均衡/数据平衡/数据倾斜

问题的来源: 由于在hive工具运行sql,出现sql卡顿的情况,去cdh上查看yarn资源的分布情况,发现了整个cdh平台中hdfs和yarn资源分布不均匀,大量的爆红显示: 以下 DataNode 数据目录 位于小于其可用空间 10.0 吉字节 的文件系统中。 /data1/dfs/dn&#xff08;可用&#xff1a;7.2 …

Python爬虫协程批量下载图片

import aiofiles import aiohttp import asyncio import requests from lxml import etree from aiohttp import TCPConnectorclass Spider:def __init__(self, value):# 起始urlself.start_url value# 下载单个图片staticmethodasync def download_one(url):name url[0].spl…

SpringCloud 微服务中网关如何记录请求响应日志?

在基于SpringCloud开发的微服务中&#xff0c;我们一般会选择在网关层记录请求和响应日志&#xff0c;并将其收集到ELK中用作查询和分析。 今天我们就来看看如何实现此功能。 日志实体类 首先我们在网关中定义一个日志实体&#xff0c;用于组装日志对象 Data public class …