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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么一个是12,一个是-11

评分

参与人数 1黑马币 +15 收起 理由
韩军博 + 15

查看全部评分

7 个回复

倒序浏览
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;因为返回最接近参数的long.通过加上1/2 将该结果舍入为整数,取结果的基数并将其强制转换为long 类型。换句话说,结果等于以下表达式的值:(long)Math.floor(a + 0.5d)

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
Math.round(x)的实质是 对 x 先加上0.5,然后对其进行向下取值。即 Math.round(x)= Math.floor( x + 0.5  )

所以 Math.round(11.5)=12 ; Math.round(-11.5)= -11

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
round方法返回的是最接近你传递的参数的整数,正数的11.5,最接近它的整数是12,-11.5最接近它的整数-11,也就是四舍五入的意思

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
首先:
Math类round的内部实现
public static void round(float a){
   return (int)floor(a+0.5f);
}

public static void round(double a){
   return (double)floor(a+0.5d);
}
都是将参数值+0.5后与floor()进行运算,floor():它是取一个小于或等于参数值的最大整数。
用一句话概括round()方法的运算效果了:Mah类的round()方法的运算结果是一个<=(参数值+0.5)的最大整数。
所以Math.round(11.5)=12    Math.round(-11.5)=-11

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
{:soso_e103:}
回复 使用道具 举报
楼主,这其实是一些定义来的,就像我们说四舍五入,或进一法,其都是一种约定俗成的东西,
回复 使用道具 举报
楼主,这其实是一些定义来的,就像我们说四舍五入,或进一法,其都是一种约定俗成的东西,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马