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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© bird_not_fat 中级黑马   /  2013-10-11 22:22  /  2444 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么Math.round(3.5)得4,而Math.round(-3.5)得-3啊...好崩溃:L

评分

参与人数 1技术分 +1 收起 理由
To + 1 鼓励一下,多来论坛活跃

查看全部评分

10 个回复

倒序浏览
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

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
这不是正确的吗,round是把原数值加上0.5然后返回最接近的整数,所以-3.5+0.5=-3,返回-3
回复 使用道具 举报
Math.round()方法是先将参数加上0.5然后去取它的Math.floor()值,所有你如果是-3.6的话就是-4喽
回复 使用道具 举报
你之所以有这问题,是你还没搞懂java.lang.Math类的round()函数的本身意思
round(float a) 结果等价于  a=(int)(a+0.5f),
函数要求:对传入的参数是float类型,但是返回结果必须是int类型,也就是最后由float强转为int类型了。
运算顺序:先对参数加二分之一,然后取其整数值。

评分

参与人数 1技术分 +1 收起 理由
To + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
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:21
7#
源码:
  1. public static long round(double a) {
  2.         return (long)floor(a + 0.5d);
  3.     }
复制代码
还是源码看的清晰。
回复 使用道具 举报
是对的啊。 是得到离他最近比它大的整数  4  比3.5大      -3  比 -3.5
回复 使用道具 举报
张慧 发表于 2013-10-12 01:26
源码:还是源码看的清晰。

怎么把源码按照这种格式发到帖子里啊
回复 使用道具 举报
张慧 中级黑马 2013-10-12 11:05:03
10#


代码 粘贴到“<>”里面。
回复 使用道具 举报
To 金牌黑马 2013-10-12 11:17:06
11#
楼主你好,如果问题已解决请将帖子状态改为提问结束,如果未解决请继续提问,谢谢合作。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马