出现 Non-terminating decimal expansion; no exact representable decimal result 问题的解决方法

完美解决Non-terminating decimal expansion; no exact representable decimal result.异常 我们在使用BigDecimal进行精确计算时常常会出现Non-terminating decimal expansion; no exact representable decimal result.异常。 阅读详情

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

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

可以在 divide() 方法中传入 MathContext 对象或 RoundingMode 对象,指定精度和舍入模式,这样就不会再抛错咯O(∩_∩)O哈哈~

在任何情况下,可以为舍入控制提供八种舍入模式。

RoundingMode 对象提供了以下八种舍入模式:
常量名    说明
CEILING    向正无限大方向舍入。
DOWN    向零方向舍入。
FLOOR    向负无限大方向舍入。
HALF_DOWN    向最接近数字方向舍入,如果与两个相邻数字的距离相等,则向下舍入。
HALF_EVEN    向最接近数字方向舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
HALF_UP    向最接近数字方向舍入,如果与两个相邻数字的距离相等,则向上舍入。
UNNECESSARY    断言具有精确结果。

举例如下:

舍入模式举例

我们用的比较多的舍入模式是 HALF_UP,也就是俗称的四舍五入啦O(∩_∩)O哈哈~
 

java_资金运算工具类_提供精确的加减乘除法等运算 一些工具类代码块的集合: 提供精确的加法运算 提供精确的减法运算 提供精确的乘法运算 精确的除法运算. 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入 提供精确的小数位四舍五入处理 取余数 取余数 BigDecimal 比较大小 获取自己想要的数据格式 立即下载

相关推荐

详谈Java中BigDecimal的一个除法异常

下面小编就为大家分享一篇详谈Java中BigDecimal的一个除法异常,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

解决:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal

解决方案:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

damoneric_guo的博客 1万+

【AI】使用Cursor和AI编程生成的VUE前端框架

本项目是一个基于VUE.js的前端框架,结合了登录、图形验证码、权限校验等常用功能模块。通过与Cursor AI交互生成的代码,展示了AI在编程中的潜力与效率。

清欢渡的博客 9860

【异常解决】Non-terminating decimal expansion; no exact representable decimal result.

原因是 Java 中使用 BigDecimal 做除法运算的时候,值有可能是无限循环的小数,所以我们就需要在 divide 方法中传递第二个参数,来定义小数点后的精确位数,否则在不整除的情况下,结果是无限循环的小数,就会抛出上面这个异常。如果结果为正数,则舍入行为与 ROUND_UP 相同;如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。

No8g攻城狮的博客 2万+

1G/2.5G Ethernet PCS/PMA or SGMII

SGMII即Serial GMII,串行GMII,收发各一对差分信号线,时钟频率625MHz,在时钟信号的上升沿和下降沿均采样,所以总的数据速率为1.25Gbps=625Mbps*2。参考时钟RX_CLK由PHY提供,是可选的,主要用于MAC侧没有时钟的情况,一般情况下,RX_CLK不使用。收发都可以从数据中恢复出时钟。在TXD发送的串行数据中,每8比特数据会插入TX_EN/TX_ER 两比特控制信息,同样,在RXD接收数据中,每8比特数据会插入RX_DV/RX_ER 两比特控制信息。

sqzjiayou的博客 1万+

攻克Windows平台3DGS复现:从环境配置到可视化实战全记录

本文详细记录了在Windows平台成功复现3D Gaussian Splatting(3DGS)的完整流程,涵盖从环境配置、依赖安装、数据准备到模型训练与可视化的全步骤。重点解决了Windows下CUDA版本匹配、Visual Studio编译及SIBR_viewers可视化工具部署等核心难题,为开发者提供了一份详实的避坑指南与实战手册。

weixin_28839699的博客 251

出现 Non-terminating decimal expansion; no exact representable decimal result 问题的解决方法

代码中使用了 BigDecimal 做精确计算,在做除法时,系统抛出 “ Non-terminating decimal expansion; no exact representable decimal result”。 1 分析 BigDecimal 是不可变的、任意精度的有符号十进制数,所以可以做精确计算。但在除法中,准确的商可能是一个无限长的十进制扩展;例如,1 除以 3 所得的商。我

读万卷书,行万里路 11万+

[原创]Linux 802.11n CSI tool安装教程(亲测可用)

Linux 802.11n CSI tool安装教程 前言 网上关于Intel5300 CSI tool的教程繁多,实际有效的可以说极少,各种疏漏错误。装的时候被坑无数次,终于调通。其实装这个工具并不太难,但是很多人把它弄得极其复杂,所以写这篇博客来帮助和我有一样困扰的人。我基本沿用的是官方文档旧版本的安装方案,针对其冗杂之处做了大量改进。 旧版安装教程: http://dhalperi....

u014645508的博客 4万+

Java BigDecimal出现 Non-terminating decimal expansion; no exact representable decimal result 问题的解决方法

代码中使用了 BigDecimal 做精确计算,在做除法时,系统抛出 “ Non-terminating decimal expansion; no exact representable decimal result”。 1 分析 BigDecimal 是不可变的、任意精度的有符号十进制数,所以可以做精确计算。但在除法中,准确的商可能是一个无限长的十进制扩展;例如,1 除以 3 所得的商。我们在做除法时,没有指定舍入模式,并且无法表示为准确的结果,因此抛出了这个异常(java.lang.Arithmet

qq_38224386的博客 2234

机器视觉中的特征提取【0】:什么是特征提取,特征提取有什么作用?

1.什么是特征提取? 特征提取的英文叫做feature extractor,它是将一些原始的输入的数据维度减少或者将原始的特征进行重新组合以便于后续的使用。简单来说有两个作用:减少数据维度,整理已有的数据特征。 这里我给一个例子来解释特征提取的第二个作用。那就是我们很熟悉的奖学金评定,我们知道学生的文化课成绩,道德分数,以及各种其他竞赛的成绩。摆在奖学金评定委员会面前的任务就是如何知道一个学生是否...

月下花弄影 5万+

如何使用PostgreSQL数据库进行数据仓库的ETL操作

本文旨在为数据工程师、数据库管理员和分析师提供使用PostgreSQL进行数据仓库ETL操作的全面指南。ETL流程的基本原理PostgreSQL在ETL中的独特优势实际ETL实现的技术细节性能优化和最佳实践常见问题的解决方案首先介绍ETL和PostgreSQL的基本概念然后深入探讨核心技术和实现方法接着提供实际案例和代码示例最后讨论优化技巧和未来趋势ETL:提取(Extract)、转换(Transform)、加载(Load)的缩写,描述数据从源系统移动到目标数据仓库的过程。

2502_91592937的博客 873

Non-terminating decimal expansion; no exact representable decimal result

公司项目数据须要处理精度比较高的浮点数,因此弃用double类型,改用BigDecimal类来进行数值处理。但在除法运算得时候发生异常,如下: # Non-terminating decimal expansion; no exact representable decimal result 大概的意思是“没法结束的除法表达式;没有精确的除结果”。我当时输入的10/3,结果应该是3.3333…333 解决方案: 通过BigDecimal做除法运算时,在不整除出现无限循环小数时,就会报异常,解决办法就是di

CharlesYooSky的博客 581

在 MATLAB/Simulink 中构建一个卫星间激光通信链路的完整仿真系统

摘要: 本文通过Simulink详细演示了卫星间激光通信系统的建模过程,重点分析其在10Gbps高速率、2000km距离下的性能。系统设计涵盖PAM-4调制、自由空间信道建模(路径损耗、指向误差、多普勒效应)、APD探测及链路预算计算,并给出典型场景下18.5dB SNR、1e-9误码率的仿真结果。针对激光通信的μrad级指向精度挑战,提出AI辅助跟踪、混合RF/激光等优化策略,为未来太空高速组网提供可扩展的仿真框架。所需工具箱包括Communications Toolbox和Aerospace Toolb

xiaoheshang_123的博客 381

除法运算报错java.lang.ArithmeticException: Non-terminating decimal expansion

报错:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. 报错代码:两种情况 s1.divide(s2); s1.divide(s2).setScale(2, BigDecimal.ROUND_HALF_UP); 修改建议: ​s1.divide(BigDecimal divisor, int scale, int roundingMo

nica_的博客 345

C++软件异常分析概述

本文将详细讲述Windows系统中软件异常的分类以及常用的排查方法,给大家提供一个借鉴与参考。

dvlinker的技术专栏 4万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Non-terminating decimal expansion; no exact representable decimal result异常的解决方法

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法 今天在写一个JAVA程序的时候出现了异常:java.lang.ArithmeticException: Non-terminating decimal expansion; n...

成长笔记 8万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Non-terminating decimal expansion; no exact representable decimal result

由于需要处理精度比较高的浮点数,所以弃用double类型,改用BigDecimal类来进行数值处理。在加减乘时都没有出现问题,但是到除法运算时,提示了如下错误:大概的意思是“无法结束的除法表达式;没有精确的除结果”。我当时输入的10/3,结果应该是3.3333....333。 于是在网上找资料,发现我原来的处理方式有问题。BigDecimal num1 = new BigDec

lopper的专栏 17万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Non-terminating decimal expansion; no exact representable decimal result 问题解决

今天帮同事测试代码的时候,发现了一个bug问题,bug如下: BUG java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. Bug出现过程 在计算手续费收取比例的时候同事直接将BigDecimal类型使用divide(除法运算)之后的数据做 multiply 乘法运算,然后我将投放金额设为10亿,手续费设为六十六万的时候,此时比例0.00066.

喜欢吃糖丶的博客 9539

Non-terminating decimal expansion; no exact representable decimal result.

今天使用BigDecimal计算时报了这个错误 java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(BigDecimal.java:1616) at sun.reflect.N...

G_whang的博客 3262

java Non-terminating decimal expansion; no exact representable decimal result. 异常的解决方法

一.问题 JAVA程序出现异常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。 报错的语句是: profitAmount().divide(totalProfit); 二.原因 BigDecimal 是不可变的、任意精度的...

chu 1万+

BigDecimal 解决Non-terminating decimal expansion; no exact representable decimal result.异常

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

chuyouyinghe的专栏 1075

Java Non-terminating decimal expansion; no exact representable decimal result问题解决

问题描述: java.lang.ArithmeticException:Non-terminatingdecimalexpansion;noexactrepresentabledecimalresult. 问题分析: 1、使用BigDecimal.divide()方法时,只传了一个参数导致不能整除会无限循环小数导致报错。 BigDecimal num1 = new BigDecimal(3); BigDecimal num2 = new BigDecimal(1); num2.di...

旭东怪的博客 3246
上一篇: idea的windows一个工作空间中有多个module时会出现莫名的很多包引用不到
下一篇: IDEA命令行缩短器助你解决此问题:Command line is too long. Shorten command line...
qq_34412985
博客等级 码龄11年 143粉丝 983原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值