BigDecimal类整除报错的解决方案
例如:
BigDecimal num1 = new BigDecimal("10"); BigDecimal num2 = new BigDecimal("3"); BigDecimal num3 = num1.divide(num2); 其实devide的函数定义如下 BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ; scale为小数位数; roundingMode为小数模式;
金额的数据类型是BigDecimal
通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常的。
异常如下:
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(Unknown Source)
应用场景:一批中供客户的单价是1000元/年,如果按月计算的话1000/12=83.3333333333....
解决之道:就是给divide设置精确的小数点divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN)
在 java中, 四舍五入通过 BigDecimal 来实现。一定要注意:BigDecimal is Immutable。也就是跟String一样,对前一个的修改,比如setScale(), add()等都会返回一个新的BigDecimal.四舍五入舍入模式是 BigDecimal.ROUND_HALF_UP
下面贴上一张图:
举例说明:
ROUND_HALF_UP: 遇到.5的情况时往上近似,例: 1.5 ->;2 ROUND_HALF_DOWN : 遇到.5的情况时往下近似,例: 1.5 ->;1BigDecimal a = new BigDecimal(1.5); System.out.println("down="+a.setScale(0,BigDecimal.ROUND_HALF_DOWN)+"/tup="+a.setScale(0,BigDecimal.ROUND_HALF_UP)); 结果:down=1 up=2
BigDecimal类整除报错的解决方案相关推荐
- 新手常见的python报错及解决方案
此篇文章整理新手编写代码常见的一些错误,有些错误是粗心的错误,但对于新手而已,会折腾很长时间才搞定,所以在此总结下我遇到的一些问题.希望帮助到刚入门的朋友们.后续会不断补充. 目录 1.NameErr ...
- Navicat链接数据库报错1130解决方案
Navicat链接数据库报错1130解决方案 参考文章: (1)Navicat链接数据库报错1130解决方案 (2)https://www.cnblogs.com/newAndHui/p/113451 ...
- vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理)
vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理) 参考文章: (1)vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理) (2)https://www. ...
- 关于Unsupported major.minor version 52.0报错问题解决方案
关于Unsupported major.minor version 52.0报错问题解决方案 参考文章: (1)关于Unsupported major.minor version 52.0报错问题解决 ...
- 关于mybatis的xml文件中使用 >= 或者 <= 号报错的解决方案
关于mybatis的xml文件中使用 >= 或者 <= 号报错的解决方案 参考文章: (1)关于mybatis的xml文件中使用 >= 或者 <= 号报错的解决方案 (2)ht ...
- python3.7导入gevent模块报错的解决方案
python3.7导入gevent模块报错的解决方案 参考文章: (1)python3.7导入gevent模块报错的解决方案 (2)http://www.cnblogs.com/eva-j/p/939 ...
- Windows anaconda python3 import ssl报错的解决方案
Windows anaconda python3 import ssl报错的解决方案_dailinqing1984的博客-CSDN博客
- Linux CentOS7 中 完美解决VMTools失效,windows 与 Liunx间完美复制文件,无报错的解决方案
Linux CentOS7 中 完美解决VMTools失效,windows 与 Liunx间完美复制文件,无报错的解决方案 DreamFollowerss 2020-05-25 12:03:08 3 ...
- 关于Entity Framework中的Attached报错相关解决方案的总结
关于Entity Framework中的Attached报错的问题,我这里分为以下几种类型,每种类型我都给出相应的解决方案,希望能给大家带来一些的帮助,当然作为读者的您如果觉得有不同的意见或更好的方法 ...
最新文章
- 设计模式系列3-----C++实现命令模式(Command Pattern)
- Shell学习笔记1-2
- 为啥地址线是20根则存储单元个数为2的20
- antd 能自适应吗_自首要满足的条件有哪些,自首能从宽处罚吗?
- 160 - 39 damn
- 那些查了无数遍的问题
- Docker入门 三 用服务来扩展和负载均衡你的应用
- 8条体面的程序员偷懒技巧
- python画数学函数_Python 绘制你想要的数学函数图形 !
- SMO算法是干什么的?有什么作用?
- iOS应用支持IPV6,就那点事儿
- python识别手写文字_python实现ocr-手写体识别
- 应广单片机开发流程需要注意哪些?
- 2 数据可视化大屏 - 布局
- 今天遇到安装CAD2014提示已安装磁盘空间显示0字节,无法下一步,已解决.#CAD2014提示已安装磁盘空间显示0字节无法下一步
- 尚硅谷智慧校园 —— 1、简介及环境搭建
- 从无序到有序的负熵力量
- element ui字段_ui备忘单下拉字段
- 《近匠》专访Ayla Networks云平台工程部主管Sudha Sundaresan——企业级物联网云平台的设计与部署
- 什么使格瓦拉风行至今