黑马程序员技术交流社区

标题: 保留小数点两位! [打印本页]

作者: a8851625    时间: 2014-11-13 17:54
标题: 保留小数点两位!

                double l=113.6696132;
                int n=(int)(l*100+0.5);       
                System.out.println((double)n /100);

        通过这个方法可以保留小数两位,但是无论是*1000 /1000 还是更多数量级,都只能保留2位,这是为啥?
有更好的方法介绍么?越简单越好!
作者: Paul_Chang    时间: 2014-11-13 19:37
没太看懂,不过(double)n/100,先执行的是右边再强制转换的,可能损失精度了.对于保留小数位的运算,可参考该类:java.text.DecimalFormat
作者: hanxing    时间: 2014-11-14 00:13
  1. class Demo7
  2. {      
  3.         public static void main(String[] args)
  4.         {
  5.           double num=123.774789;
  6.                  String str=String.valueOf(num);
  7.                  int index=str.indexOf(".");
  8.                 str=str.substring(index+1,index+3);//取小数点后的2位数字
  9.                  num=(int)num+(double)Integer.valueOf(str)/100;//整数部分+2位数字/100
  10.                  System.out.println(num);

  11.     }
  12. }
复制代码

作者: chudaming213    时间: 2014-11-14 05:57
  int n=(int)(l*100+0.5)这句运行之后 113.6696132就变成11367之后的数字都没有了,所以在这句之后无论你是乘以多少再除以多少,n都是11367的。之后也都是对这个数进行操作了,比如你使用的强制类型转换double。不知道这么解释对不。
作者: 马个了黑_邓    时间: 2014-11-14 16:19
                double d = 34.5354444;
                long l = Math.round(d*100);  //扩大100倍后四舍五入
                System.out.print((double)l/100);

小小代码,贱笑了
作者: 冥夜    时间: 2014-11-14 20:59
马个了黑_邓 发表于 2014-11-14 16:19
double d = 34.5354444;
                long l = Math.round(d*100);  //扩大100倍后四舍五入
  ...

能完成功能,但是*100很容易数值超出范围。
作者: 高昌德    时间: 2014-11-15 06:41
表示同意2楼
作者: yibo924    时间: 2014-11-15 07:32
逻辑没问题,但是int范围不够 113669超过2∧7了




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