一个 float 类型的变量,当数据量很大时(如:11111111111111111111111.0),它就会以科学计数法来显示...怎么才能让它正常显示呢???

解决方案 »

  1.   

    那就不能用float了吧:精度有限!
      

  2.   

    请用java.math.BigDecimalBigDecimal bd=new BigDecimal("11111111111111111111111.0");
      

  3.   

    JDK1.5里面有一个Formatter类可以实现你需要的功能,另外也可以用String.format()方法,后者也是用Formatter来实现格式化输出的,演示代码如下:double d = 11231242312323242d;
    String ret = String.format(Locale.US, "d = %20f", d);
    System.out.println(ret);
      

  4.   

    ls注意"当数据量很大时"!即使double也是允许最多20位的精度(记得好象是16~17位),而楼主给出的例子已经有23位了
      

  5.   

    float d = 11111111111111111111111.0;
    System.out.println("d = " + new java.text.DecimalFormat("0.00").format( d ) );
      

  6.   

    to:Chinajash() 
        那个方法好像会保留很多位的小数,我只想要两位或一位,怎么解决?to:hdhmail2000(禅剑飞雪)
        打印出来的结果好像不正确哦...to:malligator(不能再整天泡在CSDN里了!) 
        你的方法好像不光是数据不正确,连小数点都没了...救命啊 !~~~~~~~~~~~~~~~~~~~~~~~
      

  7.   

    搂主,把float换成double
    double d = 11111111111111111111111.0;
    System.out.println("d = " + new java.text.DecimalFormat("0.00").format( d ) );
      

  8.   

    当然数字很大的时候有精度损失的
    要想不损失的话,可能要自己写加减乘除法的运算了
    下面是我写的计算任意整数阶乘的算法,里面有大数加法,乘法的算法,你参考下了
    /**
     * 文件Test.java
     * @author hdhmail2000(禅剑飞雪)
     *
     */
    public class Test 
    {
    /**
     * 大数加法
     */
    public String add(String a,String b)
    {
    String big=a.length()>b.length()?a:b;
    String small=a.length()>b.length()?b:a;
    int dot=0; //进位
    StringBuffer result=new StringBuffer("");
    char[] cBig=((new StringBuffer(big)).reverse()).toString().toCharArray();
    char[] cSmall=((new StringBuffer(small)).reverse()).toString().toCharArray();/*
     * 计算最小的一个与大的一个小的部分的和
     */
    for(int i=0;i<cSmall.length;i++)
    {
    int temp=Integer.parseInt(String.valueOf(cBig[i]))+Integer.parseInt(String.valueOf(cSmall[i]))+dot;
    dot=temp/10;
    result.append(temp%10);
    }/*
     * 对大的一个进行计算
     */
    for(int j=cSmall.length;j<cBig.length;j++)
    {
    int temp2=Integer.parseInt(String.valueOf(cBig[j]))+dot;
    dot=temp2/10;
    result.append(temp2);
    }/*
     * 结果的位数超过最大的时候进行进位
     */
    if(dot>0)
    {
    result.append(dot);
    }
    result=result.reverse();
    return result.toString();
    }
    /**
     * 大数乘法
     */
    public String multiply(String a,String b)
    {
    char[] cA=((new StringBuffer(a)).reverse()).toString().toCharArray();
    char[] cB=((new StringBuffer(b)).reverse()).toString().toCharArray();String result="0";
    for(int i=0;i<cA.length;i++)
    {
    StringBuffer tempSingle=new StringBuffer("");/*
     * 一个数的每一位数乘以另外一个数
     */
    int dot=0; //进位
    for(int j=0;j<cB.length;j++)
    {
    int temp=Integer.parseInt(String.valueOf(cA[i]))*Integer.parseInt(String.valueOf(cB[j]))+dot;
    tempSingle.append(temp%10);
    dot=temp/10;
    }/*
     * 处理进位
     */
    if(dot>0)
    {
    tempSingle.append(dot);
    }
    tempSingle=tempSingle.reverse();
    for(int k=0;k<i;k++)
    {
    tempSingle.append("0");
    }/*
     * 把每一个数乘以另一个数的结果调用加法方法相加起来
     */
    result=add(result,tempSingle.toString());
    }
    return result;
    }/**
     * 求n的阶乘
     */
    public String factor(String a)
    {String n="1";
    for(int i=1;i<=Integer.parseInt(a);i++)
    {
    n=multiply(n,String.valueOf(i));
    }
    return n;
    }/**
     * 主函数
     */
    public static void main(String[] args) 
    {
    Test test=new Test();
    System.out.println(test.factor("100"));}
    }