请问各位大侠,想实现double保留5位小数,不四舍五入,应该怎么实现?
想用转成String再截取,可是如果除不尽的循环小数,会不会溢出?谢谢!

解决方案 »

  1.   

    溢出问题应该不会发生,字符串的字长要比double高。
      

  2.   


    Double db = new Double("0.3333333333333334444444444444555555555555555");
    System.out.println("Double is:" +db);
    BigDecimal bp2 = new BigDecimal("0.3333333333333334444444444444555555555555555");
    //你的小数的位数是多少,精度就是多少。
    String str = bp2.toString();
    System.out.println(str);输出:Double is:0.3333333333333334
    0.3333333333333334444444444444555555555555555然后截取字符串就好了。如果真的不要四舍五入,对字符串直接操作就好了。还要转换干什么呢?
      

  3.   

    用BigDecimal可提高精度范围  不过不四舍五入的话你取5位怎么都不准的~   实际上浮点数是永远取不到精确数的  除非是能在有限位中除尽的~
      

  4.   

    限制小数的位数可以用DecimalFormat 如下:
    java.text.DecimalFormat df = new java.text.DecimalFormat( "0.000");
    String result=df.format(your double value);
    其中0.000中小数点后的0表示要保留小数的位数,result为返回的具有要求的小数位数的串,再转化为相应的double就可以了,如果是进行大数的处理的话可以使用BigDecimal,它有几个不构造函数,其中有参数可以定义精度,具体可以看下API就OK了
      

  5.   

    double保留5位小数,这个问题还和指数有关。
    例如:double a = 0.12345678, b=123.456789;
    是不是想得到 a=0.12345, b=123.45678的结果呢?那 double a=1.2345678e-1, b=1.23456789e+2的结果又是什么呢?double,可以说他的精度有多少多少位,单独说小数多少多少位是没意义的。
    比方说 1.2345678e+123456789123456789,不要说小数部分,十位个位的数都不能保证精度了。如果真的是要保证小数位的精度,那就用long,63位全部用来保存有效位的。 而double只有52位来保存有效数字。
      

  6.   


    double d1 = 3.1415926;
    int i = (int)(d1*100000);
    double d2 = (double)i/100000 ;
    System.out.print(d2);
    你看看这样行不行?  
    上面的代码还能改改 
    int i = (int)(d1*100000);
    System.out.print((double)i/100000);
      

  7.   

    用BigDicmal是一种非常好的解决精度运算的方法。3楼已经给出答案