2017-03-06 12 views
1

私はここで間違っていますか?これが正しいと確信して、私は合計を印刷することができますが、それは平均を計算することで壊れます。Java BigDecimal divide

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です。私がオンラインに見ているものはすべて構文が正しいと言います。私は日食に "算術例外"を取得します。 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