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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Yov正 中级黑马   /  2014-5-17 01:25  /  933 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Yov正 于 2014-5-18 13:01 编辑

:L jdk中的解释:static int round(float a) 返回最接近参数的 int 。
static long round(double a) 返回最接近参数的 long。
  1. public class Main {
  2.         public static void main(String[] args) {
  3.                 Random r = new Random();
  4.                 for (int i = 0; i < 20; i++) {
  5.                         int x = r.nextInt(5000);
  6.                         System.out.println(x+" =========== "+Math.round( x / 1000));
  7.                 }
  8.         }
  9. }
复制代码


结果明明是全舍去啊
  1. 3970 =========== 3
  2. 245 =========== 0
  3. 2419 =========== 2
  4. 4910 =========== 4
  5. 2470 =========== 2
  6. 3912 =========== 3
  7. 1598 =========== 1
  8. 3698 =========== 3
复制代码

2 个回复

倒序浏览
x是int型,x/1000的结果向上转型为float型,调用static int round(float a) 方法,所以结果为整数啊,没有错啊
回复 使用道具 举报
本帖最后由 焚雨成灰 于 2014-5-17 12:13 编辑

x/1000 算出来的是int型,后来自动向上转成double
拿3970来说,整个过程是这样的
3970 / 1000  ---> 3   因为这是int型计算3   --->  转成double型 3.0        Math.round(double d)
结果是3

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马