代码如下 :public static void main(String[] args) {
BigDecimal b1 = new BigDecimal(309152225.04);
BigDecimal b2 = new BigDecimal(10211943.49);
BigDecimal b3 = new BigDecimal(10211943.49);
BigDecimal b4 = new BigDecimal(0);
BigDecimal b5 = new BigDecimal(0);
BigDecimal b6 = new BigDecimal(10211943.49);
BigDecimal b7 = new BigDecimal(10211943.49);
BigDecimal b8 = new BigDecimal(1);

BigDecimal b9 = b1.add(b2).add(b3).add(b4).add(b5).add(b6).add(b7).add(b8);

System.out.println(b9);
}
输出结果是:
350000000.00000002235174179077148437500正确的结果应该是:
350000000
为什么后面会多出这么多数字呢?是不是在调用add方法时还需要加入其他参数?

解决方案 »

  1.   

    public static void main(String[] args) {
    BigDecimal b1 = new BigDecimal("309152225.04");
    BigDecimal b2 = new BigDecimal("10211943.49");
    BigDecimal b3 = new BigDecimal("10211943.49");
    BigDecimal b4 = new BigDecimal("0");
    BigDecimal b5 = new BigDecimal("0");
    BigDecimal b6 = new BigDecimal("10211943.49");
    BigDecimal b7 = new BigDecimal("10211943.49");
    BigDecimal b8 = new BigDecimal("1"); BigDecimal b9 = b1.add(b2).add(b3).add(b4).add(b5).add(b6).add(b7).add(
    b8); System.out.println(b9);
    }
      

  2.   

    import java.math.*;
    public class Test
    {
    public static void main(String[] args) {
     BigDecimal b1 = new BigDecimal(309152225.04); 
     BigDecimal b2 = new BigDecimal(10211943.49); 
     BigDecimal b3 = new BigDecimal(10211943.49); 
     BigDecimal b4 = new BigDecimal(0); 
     BigDecimal b5 = new BigDecimal(0); 
     BigDecimal b6 = new BigDecimal(10211943.49); 
     BigDecimal b7 = new BigDecimal(10211943.49);
     BigDecimal b8 = new BigDecimal(1); 
     BigDecimal b9 = b1.add(b2).add(b3).add(b4).add(b5).add(b6).add(b7).add(b8); 
     System.out.println(b1);
     System.out.println(b2);
     System.out.println(b3);
     System.out.println(b4);
     System.out.println(b5);
     System.out.println(b6);
     System.out.println(b7);
     System.out.println(b8);
    System.out.println(b9); 
     }
    }
    BigDecimal的构造函数用double在转化的时候已经变了,构造函数一般还是用String作为参数好,double转成二进制表示的时候未必能精确表示的。
      

  3.   

    可以在加的时候设置精度,也可以最后设置一下
    具体看API最后设置帮你写了下
    System.out.println(b9.divide(new BigDecimal(1),2, BigDecimal.ROUND_HALF_UP));
      

  4.   

    对,对,很久没用都忘记了,应该用string 谢谢
      

  5.   

    以上输出结果为350000000.00尽量以String为参数构造,因为double的精度问题System.out.println(new BigDecimal(309152225.04));
    这个的结果是309152225.040000021457672119140625