例如:

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类整除报错的解决方案相关推荐

  1. 新手常见的python报错及解决方案

    此篇文章整理新手编写代码常见的一些错误,有些错误是粗心的错误,但对于新手而已,会折腾很长时间才搞定,所以在此总结下我遇到的一些问题.希望帮助到刚入门的朋友们.后续会不断补充. 目录 1.NameErr ...

  2. Navicat链接数据库报错1130解决方案

    Navicat链接数据库报错1130解决方案 参考文章: (1)Navicat链接数据库报错1130解决方案 (2)https://www.cnblogs.com/newAndHui/p/113451 ...

  3. vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理)

    vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理) 参考文章: (1)vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理) (2)https://www. ...

  4. 关于Unsupported major.minor version 52.0报错问题解决方案

    关于Unsupported major.minor version 52.0报错问题解决方案 参考文章: (1)关于Unsupported major.minor version 52.0报错问题解决 ...

  5. 关于mybatis的xml文件中使用 >= 或者 <= 号报错的解决方案

    关于mybatis的xml文件中使用 >= 或者 <= 号报错的解决方案 参考文章: (1)关于mybatis的xml文件中使用 >= 或者 <= 号报错的解决方案 (2)ht ...

  6. python3.7导入gevent模块报错的解决方案

    python3.7导入gevent模块报错的解决方案 参考文章: (1)python3.7导入gevent模块报错的解决方案 (2)http://www.cnblogs.com/eva-j/p/939 ...

  7. Windows anaconda python3 import ssl报错的解决方案

    Windows anaconda python3 import ssl报错的解决方案_dailinqing1984的博客-CSDN博客

  8. Linux CentOS7 中 完美解决VMTools失效,windows 与 Liunx间完美复制文件,无报错的解决方案

    Linux CentOS7 中 完美解决VMTools失效,windows 与 Liunx间完美复制文件,无报错的解决方案 DreamFollowerss 2020-05-25 12:03:08  3 ...

  9. 关于Entity Framework中的Attached报错相关解决方案的总结

    关于Entity Framework中的Attached报错的问题,我这里分为以下几种类型,每种类型我都给出相应的解决方案,希望能给大家带来一些的帮助,当然作为读者的您如果觉得有不同的意见或更好的方法 ...

最新文章

  1. 设计模式系列3-----C++实现命令模式(Command Pattern)
  2. Shell学习笔记1-2
  3. 为啥地址线是20根则存储单元个数为2的20
  4. antd 能自适应吗_自首要满足的条件有哪些,自首能从宽处罚吗?
  5. 160 - 39 damn
  6. 那些查了无数遍的问题
  7. Docker入门 三 用服务来扩展和负载均衡你的应用
  8. 8条体面的程序员偷懒技巧
  9. python画数学函数_Python 绘制你想要的数学函数图形 !
  10. SMO算法是干什么的?有什么作用?
  11. iOS应用支持IPV6,就那点事儿
  12. python识别手写文字_python实现ocr-手写体识别
  13. 应广单片机开发流程需要注意哪些?
  14. 2 数据可视化大屏 - 布局
  15. 今天遇到安装CAD2014提示已安装磁盘空间显示0字节,无法下一步,已解决.#CAD2014提示已安装磁盘空间显示0字节无法下一步
  16. 尚硅谷智慧校园 —— 1、简介及环境搭建
  17. 从无序到有序的负熵力量
  18. element ui字段_ui备忘单下拉字段
  19. 《近匠》专访Ayla Networks云平台工程部主管Sudha Sundaresan——企业级物联网云平台的设计与部署
  20. 什么使格瓦拉风行至今

热门文章

  1. android nio debug模式正常 release包crash_Flutter包大小治理上的探索与实践
  2. javascript特效_如何在网页添加鼠标点击特效
  3. 动态规划做多了以后,总结的相关知识
  4. Python(27)-模块
  5. java 1000以内的完数
  6. 基于OpenCL的mean filter性能
  7. Intel MKL 多线程设置
  8. 公司里从员工到经理,不同层级应该关注的事情
  9. AVS 分像素运动估计优化算法
  10. 软件开发者面试百问答案,老紫竹研究室出品(已经有64个)