代码如下 :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方法时还需要加入其他参数?
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方法时还需要加入其他参数?
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);
}
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转成二进制表示的时候未必能精确表示的。
具体看API最后设置帮你写了下
System.out.println(b9.divide(new BigDecimal(1),2, BigDecimal.ROUND_HALF_UP));
这个的结果是309152225.040000021457672119140625