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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a8851625 中级黑马   /  2014-11-13 17:54  /  1789 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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

        通过这个方法可以保留小数两位,但是无论是*1000 /1000 还是更多数量级,都只能保留2位,这是为啥?
有更好的方法介绍么?越简单越好!

7 个回复

倒序浏览
没太看懂,不过(double)n/100,先执行的是右边再强制转换的,可能损失精度了.对于保留小数位的运算,可参考该类:java.text.DecimalFormat
回复 使用道具 举报
  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. }
复制代码
回复 使用道具 举报
  int n=(int)(l*100+0.5)这句运行之后 113.6696132就变成11367之后的数字都没有了,所以在这句之后无论你是乘以多少再除以多少,n都是11367的。之后也都是对这个数进行操作了,比如你使用的强制类型转换double。不知道这么解释对不。
回复 使用道具 举报
                double d = 34.5354444;
                long l = Math.round(d*100);  //扩大100倍后四舍五入
                System.out.print((double)l/100);

小小代码,贱笑了
回复 使用道具 举报
马个了黑_邓 发表于 2014-11-14 16:19
double d = 34.5354444;
                long l = Math.round(d*100);  //扩大100倍后四舍五入
  ...

能完成功能,但是*100很容易数值超出范围。
回复 使用道具 举报
表示同意2楼
回复 使用道具 举报
yibo924 来自手机 中级黑马 2014-11-15 07:32:24
8#
逻辑没问题,但是int范围不够 113669超过2∧7了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马