2017-03-06 104 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