double a = 123456789.123456789;
String str = String.valueOf(a);
String str2 = Double.toString(a);
得到的值都是1.23456789123456789E8
怎么样才能得到原来的123456789.123456789啊

解决方案 »

  1.   

    提供一个笨方法:
        用String的方法,取得‘.’和‘E’的位置,以及E后面的数字 n,再将字符串中的
    ‘.’后移n位 double a = 123456789.123456789;
    String str = String.valueOf(a);
    String str2 = Double.toString(a);
    int dotIndex = str2.indexOf('.');
    int eIndex = str2.indexOf('E');
    int n = Integer.parseInt(str2.substring(eIndex));
    String str3 = str2.substring(0,dotIndex) + str2.substring(dotIndex+1,dotIndex+1+n)
                   +"."+str2.substring(dotIndex+1+n);
      

  2.   

    public class double2string {
    public static void main(String[] args){
    double source=123456789.123456789;
    String target1=String.valueOf(source);
    BigDecimal tmp=new BigDecimal(source);
    String target=tmp.toString();
    System.out.println(target);
    }}
      

  3.   

    最后一句改成:
    String str3 = str2.substring(0,dotIndex) + str2.substring(dotIndex+1,dotIndex+1+n)
                   +"."+str2.substring(dotIndex+1+n,eIndex);
      

  4.   

    double a = 123456789.123456789;
    BigDecimal d=new BigDecimal(a,MathContext.DECIMAL64);
    String str = String.valueOf(d);
    System.out.println(str);
      

  5.   

    double a = 123456789.123456789;
    DecimalFormat df1 = new DecimalFormat("0.##########");
    System.out.println(df1.format(a));
    BigDecimal bd=new BigDecimal(123456789.123456789);
    System.out.println(bd.toString());
    BigDecimal bd=new BigDecimal("123456789.123456789");
    System.out.println(bd.toString());123456789.12345679
    123456789.12345679104328155517578125
    123456789.123456789如果在程序中直接写123456789.123456789得话,double类型精度有限,不能得到原来的值了
      

  6.   

    Nuage(无痕) 可以还有更简单的:double a = 123456789.123456789;String str = a+"";
      

  7.   

    Nuage的方法System.out.print = 123456789.12345679104328155517578125
      

  8.   

    好象是double类型精度有限的问题,
    只能用BigDecimal bd=new BigDecimal("123456789.123456789");这样吗
      

  9.   

    double a = 123456789.123456789;String str = a+"";
      

  10.   

    真恶心,搞到最后还是要用+
    double a = 123456789.123456789;String str = a+"";
    就太直接了!
      

  11.   

    倒,测试后好象上面的代码片段不能满足要求,汗~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    --------
    当然不行
    double a = 123456789.123456789; 系统没有这么搞的精度
      

  12.   

    public class ceshi{
    public static void main(String [] args){
    double c = 123456789.123456789;
    String a=c+"";
    System.out.println(a);
    String num=a.substring(a.indexOf('E')+1,a.length());
    int b=Integer.parseInt(num);
    a=a.substring(0,a.indexOf('.'))+a.substring(a.indexOf('.')+1,a.indexOf('E'));
    System.out.println(a);
    a=a.substring(0,b+1)+"."+a.substring(b+1,a.length());
    System.out.println(a); }
    }
      

  13.   

    不过double类型它的天生表示方法就是科学记数法,另外科学记数法小数点后最多16位!
    123456789.123456789直接打印1.2345678912345679E8所以导致一定的结果失真!
    呵呵,数据类型的容量有限呀!哈哈~~~~~~~~~~~~~~~~~~~~~~~~~~~