除法运算时的一个常见异常之java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
一、背景
今天在计算库存消耗百分比(消耗的库存/总库存)的时候遇到了一个错误,java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
通过异常的描述,我们知道这是因为,某些场景下对于如1/3会得到一个无穷小数,这个时候需要定义计算结果要保留到小数点后几位,否则就会抛出上面的异常。
二、方法介绍
出现异常时使用的方法,此方法没有精度设置。
public BigDecimal divide(BigDecimal divisor)
在进行除法运算的时候,我们需要使用下面的方法来进行精度控制。
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
附:不要忘记判断分母是否为0
三、代码如下
BigDecimal b1 = new BigDecimal(1);
BigDecimal b2 = new BigDecimal(3);
if (!Objects.equals(b2, BigDecimal.ZERO)) {
// 不能整除,数学上是无穷小数,抛出ArithmeticException异常
//BigDecimal b3 = b1.divide(b2);
// 指定计算结果的精度,保留到小数点后几位,以及舍入模式
BigDecimal b3 = b1.divide(b2, 4, BigDecimal.ROUND_HALF_UP);
System.out.println(b3.toEngineeringString());
}
除法运算时的一个常见异常之java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.的更多相关文章
- BigDecimal除法运算出现java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result的解决办法
BigDecimal除法运算出现java.lang.ArithmeticException: Non-terminating decimal expansion; no exact represent ...
- java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法
今天在写一个JAVA程序的时候出现了异常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact repr ...
- 【异常】java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
异常原因:没有指定数据精度导致数据运算无法正常结算 如执行下面的除法: ).divide(BigDecimal.valueOf()).intValue(); 指定精度后就可以了: ).divide(B ...
- 【已解决】报异常:java.lang.ArithmeticException: / by zero
异常名称如下:java.lang.ArithmeticException: / by zero 原因:当我们定义的被除数为整形时候(short int long)会抛出此异常,被除数为整形时不可以 ...
- BigDecimal进行除法运算时的坑
循环小数输出的坑 BigDecimal做除法时如果出现除不尽(循环小数)的情况,会抛异常: BigDecimal a = new BigDecimal("1"); System ...
- BigDecimal不整除的一个异常java.lang.ArithmeticException
转载地址:http://blog.csdn.net/jobjava/article/details/6764623 金额的数据类型是BigDecimal 通过BigDecimal的divide方法进行 ...
- Java企业微信开发_12_异常:java.lang.OutOfMemoryError: Java heap space
一.异常现象 今天客户迁到正式环境,在做企业微信 接收消息服务器配置 时,出现如下异常: java.lang.OutOfMemoryError: Java heap space 二.异常原因 JAV ...
- sql server 中进行除法运算时,如何得到结果是小数形式呢?
我们正常进行除法运算时,sql默认是返回一个四舍五入的数 比如12除以5,17除以3 --算法1:返回结果:2 需要的是2.40 ) as 结果1 --算法2:返回结果:5 需要的是5.67 ) as ...
- 用eclipse部署tomcat时出现异常:java.lang.IllegalArgumentException
用eclipse部署tomcat时出现异常:java.lang.IllegalArgumentException: Invalid 'log4jConfigLocation' parameter: c ...
随机推荐
- 使用wxpy这个基于python实现的微信工具库的一些常见问题
使用如下的命令行安装: pip install wxpy Collecting wxpy Downloading https://files.pythonhosted.org/packages/6b/ ...
- Eclipse不支持tomcat8_compiler编译级别选不到1.8
-------------------------------------------------------------- Eclipse不支持tomcat8 如果你要使用tomcat8.0+版本的 ...
- linux虚拟串口及远程访问
1. 虚拟终端概念 linux中有很多终端,如下简单介绍下各种终端或串口的概念. 1.1 tty:终端设备的统称 tty是Teletype或TeletypeWriter的缩写,中文翻译为电传打字机.电 ...
- Python模块(导入,内置,自定义,开源)
目录: 模块介绍 自定义模块 内置模块 开源模块 一.模块 1.模块简介 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用p ...
- jquery 内容筛选选择器
基本筛选选择器针对的都是元素DOM节点,如果我们要通过内容来过滤,jQuery也提供了一组内容筛选选择器,当然其规则也会体现在它所包含的子元素或者文本内容上 注意事项: :contains与:has都 ...
- SQL进阶系列之12SQL编程方法
写在前面 KISS -- keep it sweet and simple 表的设计 注意命名的意义 英文字母 + 阿拉伯数字 + 下划线"_" 属性和列 编程的方针 写注释 注意 ...
- C#中的WinForm的消息机制简述,及消息机制下Invoke,和BeginInvoke的使用和区别
在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate,至于委托的本质请参考我的另一随笔:对.net事件的看法. 一.为什么Control类提供了Invoke和Begin ...
- Python爬虫爬企查查数据
因为制作B2b网站需要,需要入库企业信息数据.所以目光锁定企查查数据,废话不多说,开干! #-*- coding-8 -*- import requests import lxml import sy ...
- 【Java】《Java程序设计基础教程》第七、八章学习
第七章 异常处理 通过try...catch...finally结构来捕获一个或多个异常 第八章 Java的输入与输出及文件操作 8.1 文件 File类常用的方法 1. public boolean ...
- 第三方登录绑定csrf漏洞利用
作者:pmiaowu 文章:https://www.yuque.com/pmiaowu/web_security_1/sq87w6 这里需要使用到一个微博账号与两个某厂商账号 条件: 1.微博账号:1 ...