2017-03-06 2 views
1

Qu'est-ce que je fais mal ici? Assez sûr que c'est juste, je suis en mesure d'imprimer le total, mais il se brise sur le calcul de la moyenne.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 lancée:

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

Pouvez-vous mettre à jour la sortie de la console ici aussi – GrabNewTech

+0

Ma sortie de la console est juste le total, 242. Il arrête sur la fracture, qu'il n'aime pas pour une raison quelconque. Tout ce que je vois en ligne dit que la syntaxe est bonne. Je reçois une "exception arithmétique" sur Eclipse. Il dit que BigDecimal.divide (BigDecimal) n'est pas disponible. – WhitneyChia

Répondre

2

Le ArithmeticException est jeté parce que votre division conduit à une décimale non terminale, si vous fournissez explicitement la méthode avec un mode d'arrondi, cette exception ne sera plus jeté. Alors, essayez cette

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

Merci, ça semble être ça. Je vais garder cela à l'esprit à l'avenir, je pensais que ce n'était pas nécessaire puisque la documentation ne le disait pas. – WhitneyChia

+1

Le document officiel mentionne également ce point. Veuillez vous référer à http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#divide(java.math.BigDecimal) – GrabNewTech