ArithmeticException - 没有可确切表示的小数结果

举报
简简单单Onlinezuozuo 发表于 2022/02/19 00:46:40 2022/02/19
【摘要】 ArithmeticException - 没有可确切表示的小数结果 @本文章运行于Java 8下 ArithmeticException: Non-terminating decimal exp...

ArithmeticException - 没有可确切表示的小数结果


@本文章运行于Java 8下

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

  1. 在什么情况下抛出该异常
BigDecimal a = new BigDecimal("1.6");
BigDecimal b = new BigDecimal("9.2");
a.divide(b)
  
 
  • 1
  • 2
  • 3

2.引发该异常的原因

1.BigDecimal 是一个由用户完全控制舍入行为的类,如果用户没有明确知道舍入模式,则抛出异常。
2.如果把MathContext 精度设置为0,则不会出现精度问题,因为该设置将不会使用精度计算,也就是不保留小数位。
3.Java 5 之前只支持这个行为,但是如果你指定了舍入模式,你就必须指定你期待的一个精度。比如,当出现无限小数的时候,将会抛出异常,所以,你必须指定你需要的精度以及舍入模式。
  
 
  • 1
  • 2
  • 3

3.如何解决该异常

// 指定保留2位小数,使用HALF_UP 的舍入模式
a.divide(b, 2, RoundingMode.HALF_UP)

  
 
  • 1
  • 2
  • 3

文章来源: wretchant.blog.csdn.net,作者:简简单单OnlineZuozuo,版权归原作者所有,如需转载,请联系作者。

原文链接:wretchant.blog.csdn.net/article/details/80886155

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200