BigDecimal进行除法运算时的坑
生活随笔
收集整理的這篇文章主要介紹了
BigDecimal进行除法运算时的坑
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
循環小數輸出的坑
BigDecimal做除法時如果出現除不盡(循環小數)的情況,會拋異常:
BigDecimal a = new BigDecimal("1");
System.out.println(a.divide(new BigDecimal(3)));
異常如下:
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1693)
解決辦法:使用如下兩個函數設置精度
divide(num, scale)
divide(num, scale, roundingMode)
System.out.println(a.divide(new BigDecimal(30), 2,BigDecimal.ROUND_HALF_UP));
構造函數的坑
先看下面這段代碼:
public static void main(String[] args) {
BigDecimal value1 =new BigDecimal(1024.511);
System.out.println("value1: " + value1);
BigDecimal value2 = new BigDecimal("1024.511");
System.out.println("value2: " + value2);
}
按照我們的預想,value1輸出的應該是10.511,可是實際的值卻不是這樣,如下:
value1: 10.510999999999999232613845379091799259185791015625 value2: 10.511
當我們用double類型的數據作為參數時,構造出的 BigDecimal 對象 value1 并不能保證數據的準確性。而用 String 作為參數構造對象時,數據絲毫不差。
Reference
https://blog.csdn.net/song19890528/article/details/76771943/
總結
以上是生活随笔為你收集整理的BigDecimal进行除法运算时的坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美团怎么申请退款 美团申请退款流程
- 下一篇: java poi 需要jar_Java