日期:2014-05-17  浏览次数:20842 次

关于BigDecimal方法,大的double数相减
double a = 25555555555555555559.0;
double b = 25555555555555555552.0;
System.out.println(   a-b);//输出0.0

BigDecimal d3 = new BigDecimal(Double.toString(a));
System.out.println( Double.toString(a));//输出2.5555555555555557E19   (1)
BigDecimal d4 = new BigDecimal(Double.toString(b));
System.out.println( Double.toString(b));//输出2.5555555555555557E19
System.out.println(  d3.subtract(d4).doubleValue());//输出0.0

怎么才能把double 类型25555555555555555559.0,转换成String而不失真?
在(1)处就丢失数据了。。。

这样怎么进行高精度的double计算?在线等。。。

------解决方案--------------------
你为什么要把 double 数变成 string 再相减?直接调用 BigDecimal 类里面的方法不行吗
------解决方案--------------------
这样就OK了!
BigDecimal d5 = new BigDecimal("25555555555555555559.0");
BigDecimal d6 = new BigDecimal("25555555555555555552.0");
System.out.println(d5.subtract(d6));

楼主的代码前两行:
double a = 25555555555555555559.0;
double b = 25555555555555555552.0;
System.out.println(a);
System.out.println(b);

用double去接收这两个数字,可以发现,打印出来的是一样的,说明这里就已经存不准了,所以下面的就都不准确了。用BingDecimal需要注意要用它的接收字符串参数的构造函数。。。

相关资料更多>