在JSP程序中两个 float型的数:0.88 , 16.5 相乘 等于 14.5199995 ,为什么不是14.52

解决方案 »

  1.   

    就是因为是float,float是小数点后7位
      

  2.   

    import java.text.*;class fnum
    {
      DecimalFormat df = new DecimalFormat("#.00"); 
      
      public static void main(String k[]){
         fnum f = new fnum();
      }
      
      public fnum(){
         StringBuffer d = new StringBuffer("");
         df.format(1123.33333,d,new FieldPosition(2));
         
         System.out.println(d);
      }}
    テストして下さい
      

  3.   

    import java.math.*;
    class frm extends JFrame
      {JLabel label=new JLabel("OK");
      double val = 34.232323,ret;
      frm()
        {this.getContentPane() .add(label) ;
    //方法一
        ret=Math.round(val*100);//因为round返回long型,所以要将他转换为double
        ret/=100;//要一步一步做(类型经过了转换)
    //方法二
        BigDecimal b = new BigDecimal(val);//这种好
        ret= b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue() ;
        label.setText(String.valueOf(ret).toString()) ;
        }
      }
      

  4.   


    import java.math.*;
    ……
    方法1:
    float f = 34.232323;
    BigDecimal b = new BigDecimal(f);
    float f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
    // b.setScale(2, BigDecimal.ROUND_HALF_UP) 表明四舍五入,保留两位小数
    方法2:
    float scale = 34.236323;
    DecimalFormat fnum = new DecimalFormat("##0.00");
    String dd=fnum.format(scale);  
    System.out.println(dd);
      

  5.   

    JVM对float运算有很多问题,请用double型
      

  6.   


    import java.math.BigDecimal
    http://www.21codes.com/edu/pr/Java/620/2005/11/26/edu_75814.html
    有好的方法
    用round不是很好