黑马程序员技术交流社区

标题: 给定一个double型小数如0.0000000000000000004253675735,保留小数的最后两位, [打印本页]

作者: 尹博    时间: 2012-4-17 19:41
标题: 给定一个double型小数如0.0000000000000000004253675735,保留小数的最后两位,
给定一个double型小数如0.0000000000000000004253675735,保留小数的最后两位,并打印,怎么做呢?
作者: liuyang    时间: 2012-4-17 21:07
应该是保留小数点后两位吧,
你可以这样
double d = 1.234567;
DecimalFormat to= new DecimalFormat("0.00");
System.out.println(to.format(d));
作者: 秦冲    时间: 2012-4-17 21:21
转换一下思维,你可以把它先变成String类型的,然后通过String类中的方法解决。
作者: 李哲    时间: 2012-4-17 21:24


  1. public class Little {



  2.         public static void main(String[] args) {
  3.                
  4.                  System.out.println(LastTwo(0.0000000000000000004253675735));            

  5.         }
  6.         public static String LastTwo(double d)
  7.     {
  8.         String s=new Double(d).toString();
  9.         
  10.         if(s.indexOf("E")==-1)
  11.         {     
  12.                 return s.substring(s.length()-2);   
  13.             }
  14.         return s.substring(s.indexOf("E")-2,s.indexOf("E"));
  15.     }



  16. }
复制代码

作者: 曾虓    时间: 2012-4-17 21:32
本帖最后由 曾虓 于 2012-4-17 21:33 编辑

应该是保留小数后除0以外的后两位吧。你那个应该结果是0.00000000000000000042,对吗?
楼上有先转换成字符串,再处理字符串的方式,这样个人认为效率会很低。可以采取给数值先去除掉整数部分,再乘10,再和1比较的方法,这样能保证效率。
代码如下:
  1. import java.text.DecimalFormat;
  2. import java.text.NumberFormat;

  3. public class zeng {

  4.     public static void main(String[] args) {
  5.         double d = 13.000110123456789d;
  6.         int num = GetMethod(d);
  7.         // 格式化
  8.         DecimalFormat df = (DecimalFormat) NumberFormat.getInstance();
  9.         df.setMaximumFractionDigits(num);
  10.         System.out.println(df.format(d));
  11.     }

  12.     private static int GetMethod(double d) {// 取出到底小数点除0外后两位的位数
  13.         double dd = d - (int) d;
  14.         int num = 0;
  15.         for (int i = 1; i < Integer.MAX_VALUE; i++) {
  16.             dd = dd * 10;
  17.             if ((int) dd > 1) {
  18.                 num = i;
  19.                 break;
  20.             }
  21.         }
  22.         return num;
  23.     }

  24. }
复制代码
如果是0.000110123456789d这个数值:
结果输出如图:

如果是13.000110123456789d这个数值
结果输出如下图:

希望对你有所帮助

作者: 尹博    时间: 2012-4-17 21:54
谢谢楼上各位的帮助,我的意思是对于
0.0000000000000000004253675735这样一个小数,输出结果为
0.0000000000000000000000000035或者其指数形式3.5E-27
我当时是用类似于 曾虓 说的方法做的,但发现循环判断条件很难写,一不小心就无限循环了,后来用StringBuilder做的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2