日期:2014-05-18  浏览次数:20727 次

请教BigDecimal的用法,我是初学的
import java.math.*;

public class Num03 {

public static void main(String[] args) {
BigDecimal i = new BigDecimal(Math.pow(2, 64));
System.out.println(i);
}

}




import java.math.*;

public class Num03 {

public static void main(String[] args) {
BigDecimal i = new BigDecimal((Math.pow(2, 64))-1);
System.out.println(i);
}

}



为什么这两段代码的结果会一样。如何对BigDecimal进行减运算。
BigDecimal java

------解决方案--------------------
OK
2的64次方,

BigDecimal a = BigDecimal.valueOf(2);
BigDecimal b = a.pow(64);


除法,保留4位小数

BigDecimal a = new BigDecimal("1234.5678");
BigDecimal b = new BigDecimal("9876.5432");
BigDecimal c = a.divide(b, 4, BigDecimal.ROUND_HALF_UP);


------解决方案--------------------
BigDecimal处理精度较高的数字的,比如银行的金额。
BigDecimal本身有一条自己的运算逻辑,加减乘除,看下api就可以了解,然后搜索下相关用法
------解决方案--------------------
你的两个计算结果相同是因为Math.pow(2, 64)使用double类型处理数据,双精度浮点数的有效数字一般也就10几位,超过这个精度也就无法表示了。所以Math.pow(2, 64)本身就不是一个精确的值,是一个四舍五入的值,而1与Math.pow(2, 64)比起来是微不足道的,所以本身你减去1也不会影响这个数的四舍五入的值。就是因为浮点数有这种精度限制,所以在做精度计算的时候需要使用BigDecimal这样的类来处理,如2楼写的那样。