Java报错-Non-terminating decimal expansion; no exact representable decimal result
2023-12-15 22:41:49
1. 背景
在使用 BigDecimal 的 divide() 对两个数相除时,报了如题的错误。
public class Test {
public static void main(String[] args) {
BigDecimal b1 = new BigDecimal(1);
BigDecimal b2 = new BigDecimal(3);
System.out.println(b1.divide(b2));
// System.out.println(b1.divide(b2,2,4));
}
}
输出:
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1690)
at wenjian.Test.main(Test.java:18)
这是因为除不尽,即结果是无限小数导致的。
2. 方法
查看 API 发现 divide() 还有几个重载的方法:
其中有的方法还可以传入指定精度和舍入模式。
舍入模式有很多种,看了几篇文章,推荐一个大佬的:
3. 修正
public class Test {
public static void main(String[] args) {
BigDecimal b1 = new BigDecimal(1);
BigDecimal b2 = new BigDecimal(3);
// System.out.println(b1.divide(b2,2));
System.out.println(b1.divide(b2,2,BigDecimal.ROUND_UP)); // BigDecimal.ROUND_UP 也可以直接写 0
System.out.println(b1.divide(b2,2,BigDecimal.ROUND_DOWN));
System.out.println(b1.divide(b2,2,4));
System.out.println("----------");
// BigDecimal 还可以 setScale() 设置精度
System.out.println(new BigDecimal(1.2067).setScale(2, BigDecimal.ROUND_UP));;
}
}
输出:
0.34
0.33
0.33
----------
1.21
(图网,侵删)
文章来源:https://blog.csdn.net/JustDI0209/article/details/135021871
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!