黑马程序员技术交流社区

标题: 如何保留小数后两位? [打印本页]

作者: 陈中岩    时间: 2013-4-16 05:36
标题: 如何保留小数后两位?
本帖最后由 陈中岩 于 2013-4-16 12:26 编辑

我的问题是保留一个小数的后两位,而不是小数点的后两位。我早上1点就起床思索这个问题,就是不知道怎么办。
我也有过想法

  1. //思想:先获取这个数的整数位,然后这个数减去整数位,得到的是0.xxxxxxx
  2.                 //1,转换成字符串,然后反转就是xxxxxxx.0,取出前两位
  3.                 //2,取出后再反转
  4.                 //乘以0.1的这个数组长度-2次幂
  5.          //得出的数即可
  6. class MathTest2
  7. {         
  8.         public static void main(String[] args)
  9.         {
  10.                 LastTwo(3.12345);
  11.         }
  12. public static void LastTwo(double d)
  13.         {
  14.         
  15.                 //取得这个数的整数位i
  16.                 double i = Math.floor(d);
  17.                 //转换成整型
  18.                 sop("测试i="+i);
  19.                 int l = (int)Math.round(i);
  20.                
  21.                 sop("测试l="+l);
  22.                 //取得这个整数的小数部分xs
  23.                 double xs = (d-l);
  24.                
  25.                 sop("测试xs="+xs);
  26.                 //转换成字符串
  27.                 //String s = new Double(xs).toString();
  28.         //char[] chs = s.toCharArray();
  29.         //TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder(s));
  30.         
  31.         }
  32.         
  33.         public static void sop(Object obj)
  34.         {
  35.                 System.out.println(obj);
  36.         }
  37. }
  38.         
复制代码
但是:测试i=3.0
测试l=3
测试xs=0.12345000000000006

为啥xs是0.12345000000000006???

求高人指点一二。
再明确一下我想要的:比如输入3.12345得出的结果是0.00045
作者: 本人已死    时间: 2013-4-16 07:40
由于Java的简单类型不能够精确的对浮点数进行运算,简单的说就是计算机存的小数是以分数的形式存的,在我们调用的时候如果这个分数出现循环就会损失精度。在商业计算中我们要用 java.math.BigDecimal
所以
//取得这个整数的小数部分xs
                double xs = (d-l);
                sop("测试xs="+xs);
输出为错误的

作者: 陈圳    时间: 2013-4-16 09:13
double d=3.141592;
double c=d-(int)3.141594;小数部份
d=(int)3.141592;
d+=((int)(c*100))/100;留几位就*几位的整数.通过设置这个,可以随意保留任意位数.
作者: 陈圳    时间: 2013-4-16 09:23
  1. double d=3.141523;
  2.                 StringBuilder num=new StringBuilder(new Double(d).toString());
  3.                 int index=num.indexOf(".");
  4.                 d=Double.parseDouble(num.delete(index+1, num.length() - 2).toString());
  5.                 System.out.println(d);
复制代码
//3.23你要的是这个结果吧,刚开始没仔细看题目
作者: 黄玉昆    时间: 2013-4-16 12:38
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




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