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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM