BigDecimal   b   =   new   BigDecimal(“10.01”);
b.divide(1,2,4);返回多少是10.00还是10.01
请详细说一下这个方法,API文档没看懂

解决方案 »

  1.   

    10.01
    2 表示2位小数
    4 是ROUND_HALF_UP,也就是最常见的四舍五入,大于一般则向上舍入,否则向下舍入
      

  2.   

    BigDecimal b = new BigDecimal("10.016"); //LZ 用3位小数来测试看就知道了 10.013
    b = b.divide(BigDecimal.ONE, 2, 4);
    System.out.println(b);
      

  3.   

    我看api
    是RundingMode的下标
    所以我用
    RoundingMode rm =RoundingMode.valueOf(4);
         System.out.println(rm);
    打印出的结果是HALF_UP
    查api
    HALF_UP 
              向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。 
    貌似是四舍五入。
        public static void main(String args[]){
         RoundingMode rm =RoundingMode.valueOf(4);
         System.out.println(rm);
         BigDecimal b = new BigDecimal("10.015");
         b=b.divide(new BigDecimal(1),2,4);
         System.out.print(b);
        }
    楼主自己测试,如果小数后面的位数等于你要求的精度,那么就也就不会进行四舍五入判断了。如果小于你的精度就后面补零。大于你的精度就四舍五入。
    API还说负数的情况不一样。请区别考虑。
      

  4.   

    谢了上面两位,我一直以为是divide方法原因,后来测试发现,如下  public static void main(String[] args) {
         BigDecimal v =new BigDecimal( "10.01");
         System.out.println(v);
         BigDecimal b = new BigDecimal(v.floatValue());
         System.out.println(b);
         b.divide(BigDecimal.ONE,2,4);
         System.out.println(b.divide(BigDecimal.ONE,2,4));
        }这样输出 v是10.01,b是10.0100002288818359375,最后的是10.01。
    但是把10.01改成500000.01后
    v是500000.01,b是500000,最后是500000.01
    不知道这是什么原因。求指教
      

  5.   

    你要计算double的精度问题
    应该使用默认传入参数为String的构造函数。直接传入Double的构造函数是不行的