黑马程序员技术交流社区
标题:
给定一个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
public class Little {
public static void main(String[] args) {
System.out.println(LastTwo(0.0000000000000000004253675735));
}
public static String LastTwo(double d)
{
String s=new Double(d).toString();
if(s.indexOf("E")==-1)
{
return s.substring(s.length()-2);
}
return s.substring(s.indexOf("E")-2,s.indexOf("E"));
}
}
复制代码
作者:
曾虓
时间:
2012-4-17 21:32
本帖最后由 曾虓 于 2012-4-17 21:33 编辑
应该是保留小数后除0以外的后两位吧。你那个应该结果是0.00000000000000000042,对吗?
楼上有先转换成字符串,再处理字符串的方式,这样个人认为效率会很低。可以采取给数值先去除掉整数部分,再乘10,再和1比较的方法,这样能保证效率。
代码如下:
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class zeng {
public static void main(String[] args) {
double d = 13.000110123456789d;
int num = GetMethod(d);
// 格式化
DecimalFormat df = (DecimalFormat) NumberFormat.getInstance();
df.setMaximumFractionDigits(num);
System.out.println(df.format(d));
}
private static int GetMethod(double d) {// 取出到底小数点除0外后两位的位数
double dd = d - (int) d;
int num = 0;
for (int i = 1; i < Integer.MAX_VALUE; i++) {
dd = dd * 10;
if ((int) dd > 1) {
num = i;
break;
}
}
return num;
}
}
复制代码
如果是0.000110123456789d这个数值:
结果输出如图:
7.png
(10.48 KB, 下载次数: 41)
下载附件
2012-4-17 21:30 上传
如果是13.000110123456789d这个数值
结果输出如下图:
8.png
(4.01 KB, 下载次数: 38)
下载附件
2012-4-17 21:32 上传
希望对你有所帮助
作者:
尹博
时间:
2012-4-17 21:54
谢谢楼上各位的帮助,我的意思是对于
0.0000000000000000004253675735这样一个小数,输出结果为
0.0000000000000000000000000035或者其指数形式3.5E-27
我当时是用类似于 曾虓 说的方法做的,但发现循环判断条件很难写,一不小心就无限循环了,后来用StringBuilder做的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2