我用的<%@ page import="java.text.DecimalFormat" %> DecimalFormat df = new DecimalFormat ("######################0.00");然后 df.format(329.025)  结果输出329.02
如果 df.format(329.075)  结果输出329.08为什么一个能够进位,一个不能呢,太让我困惑了!!

解决方案 »

  1.   

    Java不能对浮点书进行精确的四舍五入
      

  2.   

    用Effective Java提到的方法:String够造BigDecimal来解决。具体的你google一下,或找到Effective Java参考一下。当然有没有更好的办法,我也不清楚。希望有。
      

  3.   

    我的做法,在要保留小数的下一位加5,即:你要保留一位.+0.05,二位+0.005,三位+0.0005,一般没问题:
    如:你的
     df.format(329.025+0.005);
     df.format(329.075+0.005);
    ...
     df.format(x+0.005);
      

  4.   

    或者可以考虑用math的round方法或者用bigdecimal,我前几天用的是round方法
      

  5.   

    to: keiy() ( ) 信誉:100 
    如果数据是329.074的话,结果就不对了!结果应该为329.07,但输入的却是329.08
    这是个bug???
      

  6.   

    BigDecimal可以实现你说的功能,不建议使用double类型.
    特别是发工资,呵呵^
      

  7.   

    to keiy()应该是在下一位加1吧保留2位有效:
    DecimalFormat df = new DecimalFormat ("######################0.00");
    df.format(329.074+0.001);
    df.format(329.075+0.001);
    df.format(329.079+0.001);
      

  8.   

    可以使用 Math.round()方法,由于round方法返回的是正数,所以你要保留两位的时候,需要先乘100,然后再除以100。
    比如:
    float ff = 0.37f;

    ff = Math.round( ff * 10 )/10f;

    System.out.println( "ff = " + ff );   //result: ff = 0.4