为什么
DecimalFormat format = new DecimalFormat("0.0000");
String value = format.format(0.00505);
value 显示是 0.0050

DecimalFormat format = new DecimalFormat("0.00");
String value = format.format(0.00505);
value 显示是 0.01

解决方案 »

  1.   

    DecimalFormat format = new DecimalFormat("0.0000");
    DecimalFormat format = new DecimalFormat("0.00");
    这两句话定义的format的格式不一样
    第一个长度够。。
    第二个不够,自动四舍五入了
      

  2.   

    默认四舍五入的问题,楼主莫感到奇怪。
    你试试DecimalFormat format = new DecimalFormat("0.00");
    String value = format.format(0.00405);是什么效果
      

  3.   

    DecimalFormat format = new DecimalFormat("0.00");
    String value = format.format(0.00500);
    这里的value显示的则是0.00
    似乎可以理解为
    if(<=5){
    舍;
    }
    else 入;
      

  4.   

    DecimalFormat format = new DecimalFormat("0.0000");
    String value = format.format(0.00505);
    value 显示是 0.0050那这个为什么不是四舍五入的???????????????
      

  5.   

    这个问题问的好,我们需要研究下java里面四舍五入的规则根据多次试验,我发现其实是按照匹配模式截取后的尾数值跟匹配模式的最小精度值一半进行比较
    如果尾数<=最小精度值一半,则舍掉,如果尾数>最小精度值一半,则保留
    DecimalFormat format1 = new DecimalFormat("0.0000");
            String value1 = format1.format(0.00505);
            String value2 = format1.format(0.005051);
            System.out.println(value1);//输出0.0050
            //因为给定格式截取小数点四位后,余数为0.00005
            //会跟匹配格式最小精度0.0001的一半比较
            //0.00005<=最小精度的一半,舍去
            
            System.out.println(value2);//输出0.0051
          //因为给定格式截取小数点四位后,余数为0.000051
            //会跟匹配格式最小精度0.0001的一半比较
            //0.000051>最小精度的一半,舍去
             
            String value3 = format1.format(0.0050500001);
            System.out.println(value3);//输出0.0051