如何给浮点型的数据限制小数点后的位数,比如说,我想出一个float型的数据,但是不想让它小数点后的位数过多,只限制两位,怎么弄,大虾们说说

解决方案 »

  1.   

    给你一个显现类参考。
    package com.css.sdmp.app.baseclass;
    /**
     * 标题: <BR></p>
     * 描述: <BR>规约小数位数</p>
     * 版权: Copyright (c) 2003<BR></p>
     * 公司:
     * 作者: 何岸 [([email protected])([email protected])]<BR>
     * 版本: 1.0<BR>
     */
    public class RuleDecimal
    {
      public RuleDecimal(){}  public static String getRuleFloatString(float initialValue)
      {
        return getRuleFloatString(initialValue,2);
      }  /**
       * 对小数进行规约位数显示
       * @param value
       * @param digit
       * @return RuleFloatString
       */
      public static String getRuleFloatString(float initialValue,int digit)
      {
        boolean plus=true;
        int dotLong=digit;
        float value=initialValue;
        if(value<0)
        {
          plus=false;
          value=-1*(value);
        }    if(dotLong<0)     dotLong=0;
        if(dotLong>5)     dotLong=5;    float increFloat=0.5F;               //为四舍五入提供的截断误差前的增量。
        for(int i=0;i<dotLong;i++)
        {
          increFloat *= 0.1F;
        }    float endValue=value+increFloat;
        int intValue=(int)endValue;    float floatValue= endValue - intValue;
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<dotLong;i++)
        {
          floatValue *= 10;   //放大小数到整数;
          byte b= (byte)floatValue;
          sb.append((char)('0'+b));
          floatValue=floatValue-b;
        }
        String plusString=(dotLong>0) ? (String.valueOf(intValue)+"."+ sb.toString()) : String.valueOf(intValue);
        return plus ? plusString : "-"+plusString;
      }  public static void main(String[] args)
      {
        for(int i=0;i<=7;i++)
        {
          System.out.println("0.0F"+"    "+getRuleFloatString(0.0F,i));
          System.out.println("-0.0F"+"    "+getRuleFloatString(-0.0F,i));
          System.out.println("0.9688888888888F"+"    "+getRuleFloatString(0.9688888888888F,i));
          System.out.println("-0.9688888888888F"+"    "+getRuleFloatString(-0.9688888888888F,i));
          System.out.println("0.9999999999988F"+"    "+getRuleFloatString(0.9999999999988F,i));
          System.out.println("-0.4545499999999F"+"    "+getRuleFloatString(-0.4545499999999F,i));
          System.out.println("0.0999999999F"+"    "+getRuleFloatString(0.0999999999F,i));
          System.out.println("0.0099999999F"+"    "+getRuleFloatString(0.0099999999F,i));
          System.out.println("0.0009999999F"+"    "+getRuleFloatString(0.0009999999F,i));
          System.out.println("0.0000999999F"+"    "+getRuleFloatString(0.0000999999F,i));
          System.out.println("0.0000099999F"+"    "+getRuleFloatString(0.0000099999F,i));
          System.out.println("0.0000009999F"+"    "+getRuleFloatString(0.0000009999F,i));
          System.out.println("0.0000000999F"+"    "+getRuleFloatString(0.0000000999F,i));    }
      }
    }
      

  2.   

    用NumberFormat类或者BigDecimal对象,具体查API文档!
      

  3.   

    用format轻松搞定了
    System.out.println(new DecimalFormat("0.0000").format(1234.2343455f));
    楼上那个长长的程序都干了些什么?
      

  4.   

    而且1楼的程序从来就没有测试过绝对值大于10万的浮点数,以为float只是int在小数点上的扩展
      

  5.   

    我已经测试过大于10万的浮点数。用javaAPI当然可以搞定了,问题是如果没有这个API,自己写算法完成这项工作,该如何去做,
    不是可以锻炼自己吗?