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进行减运算。BigDecimaljava

解决方案 »

  1.   

    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);
      

  2.   

    BigDecimal处理精度较高的数字的,比如银行的金额。
    BigDecimal本身有一条自己的运算逻辑,加减乘除,看下api就可以了解,然后搜索下相关用法
      

  3.   

    你的两个计算结果相同是因为Math.pow(2, 64)使用double类型处理数据,双精度浮点数的有效数字一般也就10几位,超过这个精度也就无法表示了。所以Math.pow(2, 64)本身就不是一个精确的值,是一个四舍五入的值,而1与Math.pow(2, 64)比起来是微不足道的,所以本身你减去1也不会影响这个数的四舍五入的值。就是因为浮点数有这种精度限制,所以在做精度计算的时候需要使用BigDecimal这样的类来处理,如2楼写的那样。