double pr =0.056;
            BigDecimal  bd=new  BigDecimal(Double.toString(pr));
            bd.setScale(2,BigDecimal.ROUND_HALF_UP);
            System.out.println(bd.doubleValue()); //0.056
            double pr =0.056;
            BigDecimal  bd=new  BigDecimal(Double.toString(pr)).setScale(2,BigDecimal.ROUND_HALF_UP);
            System.out.println(bd.doubleValue());//0.06这两个有什么区别吗?我看着都一样

解决方案 »

  1.   


    第一个也有 bd.setScale(2,BigDecimal.ROUND_HALF_UP);
      

  2.   


    import java.math.BigDecimal;
    public class BigDecimalTest {
    public static void main(String[] args) {
    double pr =0.056;
            BigDecimal  bd=new  BigDecimal(Double.toString(pr));
            bd.setScale(2,BigDecimal.ROUND_HALF_UP);
            System.out.println(bd.doubleValue()); //0.056
            double pr1 =0.056;
            BigDecimal  bd1=new  BigDecimal(Double.toString(pr)).setScale(2,BigDecimal.ROUND_HALF_UP);
            System.out.println(bd.doubleValue());//0.06 }
    }
    /*
    0.056
    0.056
    */
    声明JDK1.5,难道是愚人节的缘故???
      

  3.   

    bd.setScale(2,BigDecimal.ROUND_HALF_UP);
    是返回一个新的BigDecimal 而不是对bd进行修改
      

  4.   

    太不小心了,呵呵,刚看了一下API,setScale是有返回值的,如果不接收返回值,意味着没有改变精度???public class BigDecimalTest {
    public static void main(String[] args) {
    double pr = 0.056;
    BigDecimal bd = new  BigDecimal(Double.toString(pr));
    System.out.println(bd.doubleValue());
    bd.setScale(2, BigDecimal.ROUND_HALF_UP);
    System.out.println(bd.doubleValue());
    bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
    System.out.println(bd.doubleValue());
    }
    }
    /*
    0.056
    0.056
    0.06
    */
      

  5.   

    if (scale == this.scale)
        return this;
    同时还要注意下这个如果 scale参数与bd的一样的话 会直接返回bd