阿里云 個人網(wǎng)站 名稱google seo怎么優(yōu)化
我們在進(jìn)行A除B的時候,需要將四舍五入的邏輯放入除法的過程中就定義,不要等到A/B結(jié)果出來了再去進(jìn)行四舍五入,這樣會出現(xiàn)問題。下面舉例
10%3
我們拿10除3為例,很明顯,結(jié)果是一個除不盡的小數(shù)3.3333…
直接除
public static void main(String[] args) {BigDecimal A = new BigDecimal("10");BigDecimal B = new BigDecimal("3");System.out.println(A.divide(B).setScale(2, RoundingMode.HALF_UP));}
結(jié)果報錯Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
表示沒有精確的表示decimal結(jié)果,異常在除法計算的過程中就拋出了,所以都沒走到setScale()方法
正確的方式
public static void main(String[] args) {BigDecimal A = new BigDecimal("10");BigDecimal B = new BigDecimal("3");System.out.println(A.divide(B, 2, RoundingMode.HALF_UP));}
結(jié)果為3.33,正確的保留兩位小數(shù)和四舍五入了,這是在除法計算的過程中就執(zhí)行了的。