2017-03-06 97 views
1

我在這裏做錯了什麼?很確定這是正確的,我可以打印總數,但是然後在計算平均值時打破。Java BigDecimal鴻溝

public static void main(String[] args) { 

    BigDecimal test1 = new BigDecimal("67"); 
    BigDecimal test2 = new BigDecimal("76"); 
    BigDecimal test3 = new BigDecimal("99"); 
    BigDecimal test_count = new BigDecimal("3"); 
    BigDecimal total = test1.add(test2).add(test3); 
    System.out.println(total); 
    BigDecimal average = total.divide(test_count); 
    System.out.println(average); 

} 

拋出異常:

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 HelloWorld.main(HelloWorld.java:31) 
+0

可以更新控制檯輸出也在這裏 – GrabNewTech

+0

我的控制檯輸出就是它停在鴻溝,它不喜歡某種原因總,242。我在網上看到的所有內容都表明語法是對的。我在eclipse上得到了一個「算術例外」。它說BigDecimal.divide(BigDecimal)不可用。 – WhitneyChia

回答

2

的則拋出ArithmeticException因爲你的分裂導致非終止小數,如果你明確地提供一個舍入模式的方法,此異常將不再被拋出。所以,試試這個

BigDecimal average = total.divide(test_count, RoundingMode.HALF_UP); 
+0

謝謝,這似乎是。我會繼續考慮這一點,只是認爲沒有必要,因爲文檔沒有說明這一點。 – WhitneyChia

+1

官方文件也提到了這一點。請參閱http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#divide(java.math.BigDecimal) – GrabNewTech