double d = 111111111111.213231111111;定义一个double变量如上.如何才能得到一个字符串,字符串的内容为"111111111111.213231111111";使用Double.toString(d);String.valueOf(d);等都不能实现.自动将double值以科学计数法输出了.使用DecimalFormat也总有误差.有什么办法可以取出完成的字面值呢?

解决方案 »

  1.   

    double d = 111111111111.213231111111;
    String dstr=""+d;
    System.out.println(dstr);
      

  2.   

    用BigDecimal.
    BigDecimal b = new BigDecimal("111111111111.213231111111");
    String str = b.toPlainString();
    System.out.println("[" + str + "]");
      

  3.   

    非要用double的话,可以这样,但实际上数字已经超出了范围,肯定不能正常显示的.
    Double d = 111111111111.21323;
    System.out.println(d);
    java.text.NumberFormat nf = java.text.NumberFormat.getInstance();
    nf.setGroupingUsed(false);
    nf.setMaximumFractionDigits(100);
    System.out.println("d:="+nf.format(d)); 
      

  4.   


    谢谢大家的回复.BigDecimal定义的时候已经有了那个字符串了。我就是要求那个字符串呢...
    还有假如直接new BigDecimal(d);的时候,出来的结果也有误差了.
    希望大家能试一下再来
      

  5.   

    double的精确值中不存在你那格数字
      

  6.   

    这样有问题,
    代码public static void main(String[] args) {
    // TODO Auto-generated method stub
    BigDecimal bigDecimal=new BigDecimal(111111111111.213231111111);
    System.out.println("[" + bigDecimal.toPlainString() + "]");
    }结果[111111111111.213226318359375]
      

  7.   


    谢谢你.可是Double.MAX_VALUE 
              保持 double 类型的最大正有限值的常量,最大正有限值为 (2-2-52)·21023。
    或许是我不够理解,double的数字范围不是介于MAX_VALUE 和MIN_VALUE 之间么
      

  8.   

    没看明白.double存储确实会存在误差,难道一旦定义就不能得到以前定义的哪个字面值了么?
      

  9.   

    有意思吗?真是那么高精度的数字就用数组来装就OK了,
    非要把超出double精度的数字用double来装?
    感觉有点是把简单的问题复杂化了。
      

  10.   


    double 的精度是多少?多少就可以精确表示了?我只是把问题抽出来罢了.因为我得到一个double值,可是取出和传入的时候存在误差.就想到了这个问题.原因我也想出来了.因为定义的时候通过class文件可以看到.在编译的结果里已经装入的不是字面值了.
     ldc2_w <Double 1.1111111111121323E11> [16]