想保证精度的同时要求四舍五入的话用BigDecimal.setScaledouble f = 34.232323;
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();// b.setScale(2, BigDecimal.ROUND_HALF_UP) 表明四舍五入,保留两位小数
上面是对double类型的处理,如果对float的,则将上面所有的double字段换成float就行

解决方案 »

  1.   

    BigDecimal的方式我也试过了,一样的结果啊?
      

  2.   

    这是因为在浮点表示(float double)时,1.45f 与实际的1.45不精确相等。你可以查看有关资料就知道了。
    你也可以用如下的语句看看就知道了
        System.out.println(new java.math.BigDecimal(1.45d));
    再试一下如下的代码。自己体会
    double f1 =new java.math.BigDecimal("1.45").setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();出现的原因:在10进制的有限小数在2进制中很多都是无限循环小数。
      

  3.   

    借宝地用,请问搂主
    String temstr = new DecimalFormat("#########.#").format(d1);
    System.out.println(temstr);
    有错吗?不行的话如何改?
      

  4.   

    String temstr = new DecimalFormat("#.#").format(d1);
    System.out.println(temstr);