java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result異常的解決方法


場景描述

今天在寫一個JAVA程序的時候出現了異常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result
發現報錯的語句是:

foo.divide(bar));

 

解決方法

原來JAVA中如果用BigDecimal做除法的時候一定要在divide方法中傳遞第二個參數,定義精確到小數點后幾位,否則在不整除的情況下,結果是無限循環小數時,就會拋出以上異常。

foo.divide(bar, 2, BigDecimal.ROUND_HALF_UP);

 

源碼

注意這個BigDecimal的divide方法有兩個重載的方法,一個是傳兩個參數的,一個是傳三個參數的:

兩個參數的方法:

@param divisor value by which this {@code BigDecimal} is to be divided. 傳入除數

@param roundingMode rounding mode to apply. 傳入round的模式

三個參數的方法:

@param divisor value by which this {@code BigDecimal} is to be divided. 傳入除數
@param scale scale of the {@code BigDecimal} quotient to be returned. 傳入精度
@param roundingMode rounding mode to apply. 傳入round的模式


免責聲明!

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



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