黑马程序员技术交流社区

标题: Math类round()方法的问题 [打印本页]

作者: bird_not_fat    时间: 2013-10-11 22:22
标题: Math类round()方法的问题
为什么Math.round(3.5)得4,而Math.round(-3.5)得-3啊...好崩溃:L
作者: murder_fol    时间: 2013-10-11 22:34
java.lang.Math 类中有三个取整的方法,ceil() 向上取整,floor()向下取整
ceil(1.3)=2  ceil(-1.3)= -1;
floor(1.7)=1  floor(-1.7)=-2;

而round()方法采用的是  floor(x+0.5)的算法, 所以round(3.5)=floor(3.5+5)=4;而round(-3.5)=floor(-3.5+0.5)=floor(-3)=-3
作者: 横塘西岸    时间: 2013-10-11 22:36
这不是正确的吗,round是把原数值加上0.5然后返回最接近的整数,所以-3.5+0.5=-3,返回-3
作者: Liu阳    时间: 2013-10-11 22:41
Math.round()方法是先将参数加上0.5然后去取它的Math.floor()值,所有你如果是-3.6的话就是-4喽
作者: dolphin    时间: 2013-10-12 01:15
你之所以有这问题,是你还没搞懂java.lang.Math类的round()函数的本身意思
round(float a) 结果等价于  a=(int)(a+0.5f),
函数要求:对传入的参数是float类型,但是返回结果必须是int类型,也就是最后由float强转为int类型了。
运算顺序:先对参数加二分之一,然后取其整数值。
作者: dolphin    时间: 2013-10-12 01:17
Liu阳 发表于 2013-10-11 22:41
Math.round()方法是先将参数加上0.5然后去取它的Math.floor()值,所有你如果是-3.6的话就是-4喽 ...

不对,如果是-3.6,先给它加二分之一,结果为-3.1,取其整数值,是-3,你不信,可以在机子上试试!!!
作者: 张慧    时间: 2013-10-12 01:26
源码:
  1. public static long round(double a) {
  2.         return (long)floor(a + 0.5d);
  3.     }
复制代码
还是源码看的清晰。
作者: a283398689    时间: 2013-10-12 07:34
是对的啊。 是得到离他最近比它大的整数  4  比3.5大      -3  比 -3.5
作者: 张宏祚    时间: 2013-10-12 08:33
张慧 发表于 2013-10-12 01:26
源码:还是源码看的清晰。

怎么把源码按照这种格式发到帖子里啊
作者: 张慧    时间: 2013-10-12 11:05


代码 粘贴到“<>”里面。

作者: To    时间: 2013-10-12 11:17
楼主你好,如果问题已解决请将帖子状态改为提问结束,如果未解决请继续提问,谢谢合作。




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