A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

给定一个double型小数如0.0000000000000000004253675735,保留小数的最后两位,并打印,怎么做呢?

点评

应该是保留小数后除0以外的后两位吧。你那个应该结果是0.00000000000000000042,对吗?  发表于 2012-4-17 21:12

5 个回复

倒序浏览
应该是保留小数点后两位吧,
你可以这样
double d = 1.234567;
DecimalFormat to= new DecimalFormat("0.00");
System.out.println(to.format(d));
回复 使用道具 举报
转换一下思维,你可以把它先变成String类型的,然后通过String类中的方法解决。
回复 使用道具 举报


  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: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这个数值
结果输出如下图:

希望对你有所帮助
回复 使用道具 举报
谢谢楼上各位的帮助,我的意思是对于
0.0000000000000000004253675735这样一个小数,输出结果为
0.0000000000000000000000000035或者其指数形式3.5E-27
我当时是用类似于 曾虓 说的方法做的,但发现循环判断条件很难写,一不小心就无限循环了,后来用StringBuilder做的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马