黑马程序员技术交流社区

标题: Math类关于对小数操作的几个问题及疑惑 [打印本页]

作者: 黑马-许鹏    时间: 2013-5-14 02:50
标题: Math类关于对小数操作的几个问题及疑惑
本帖最后由 黑马-许鹏 于 2013-5-15 23:11 编辑

Math类提供对几个对小数取整的静态方法:ceil()方法,floor()方法,rint()方法,看下列代码;
  1. class  MathDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 double d=-3.14;
  6.                 System.out.println(Math.ceil(d));
  7.                 System.out.println(Math.floor(d));
  8.                 System.out.println(Math.rint(d));
  9.         }
  10. }
复制代码
打印结果如下:

这三个方法分别是:
1,取大于参数的最小整数。
2,取小于参数的最大整数。
3,最接近参数的整数(四舍五入)。
这没什么问题,不过我以前记得是有一个方法,可以对小数点后面全部砍掉直接保留整数位。不知道我记错没有,我查了API文档,有这么一个方法
[size=-1]static long
round(double a)  返回最接近参数的 long。

返回最接近参数的long。呵呵,这个跟rint()方法有啥区别啊?{:soso_e132:}

作者: 李志敏    时间: 2013-5-14 08:17
本帖最后由 李志敏 于 2013-5-14 08:21 编辑

首先返回值类型不一样 Math.rint()返回double  Math.round()返回Long
其次 Math.rint()是通过四舍五入取最接近参数的整数 而 Math.round()仅仅是取最接近参数的 整数
也就是说 如果参数是-3.5 那么rint()返回-4.0 round()返回-3 因为-3.5更接近-3 其实不考虑小数点 返回值的大小也就在参数是xxx.5的时候不一样
  1. class  MathDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 double d=-3.5;
  6.                 System.out.println(Math.ceil(d));
  7.                 System.out.println(Math.floor(d));
  8.                 System.out.println(Math.rint(d));
  9.                 System.out.println(Math.round(d));
  10.         }
  11. }
复制代码
打印结果:
-3.0
-4.0
-4.0
-3
作者: 刘胜寒    时间: 2013-5-14 13:34
强制转换。。也可以
作者: 刘胜寒    时间: 2013-5-14 13:34
如果问题解决,及时结贴。。把未解决变成以解决就行了。
作者: 黑马-许鹏    时间: 2013-5-14 16:22
李志敏 发表于 2013-5-14 08:17
首先返回值类型不一样 Math.rint()返回double  Math.round()返回Long
其次 Math.rint()是通过四舍五入取最 ...

有直接砍掉小数点后面直接保留整数部分的方法吗?
作者: 李志敏    时间: 2013-5-14 16:31
黑马-许鹏 发表于 2013-5-14 16:22
有直接砍掉小数点后面直接保留整数部分的方法吗?

强制转换成int类型
System.out.println((int)d);




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