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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 风云1989 于 2016-12-3 14:38 编辑
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
一.首先,我们先认识Math类
Math类是数学操作类,提供了一系列的数学操作方法,
在Math类中提供的一切方法都是静态方法,所以类名直接调用即可
a.常用的操作方法有
1. 求平方根  Math.sqrt(9.0);
2.求最值  Math.max(10,30);    Math.min(10,30);
3.求次方(2的3次方)  Math.pow(2,3);
4.四舍五入(舍去小数点后面的数)  Math.round(33.6);
5.随机数 Math.rondom();
二:部分源码分析
[Java] 纯文本查看 复制代码
[/size][/align][align=left][size=4]
[/size][/align][align=left][size=4]public final class Math {      [color=#ff0000]//此类不能被继承[/color]
    
    private Math() {}      //私有构造器
  
    public static final double E = 2.7182818284590452354;
   
    public static final double PI = 3.14159265358979323846;[/size][/align][align=left][size=4]}
关于round方法的源码:   
[Java] 纯文本查看 复制代码
 [/size][/align][align=left][size=4]
[/size][/align][align=left][size=4]public static int round(float a) {[/size][/align][size=4]        int intBits = Float.floatToRawIntBits(a);
        int biasedExp = (intBits & FloatConsts.EXP_BIT_MASK)
                >> (FloatConsts.SIGNIFICAND_WIDTH - 1);
        int shift = (FloatConsts.SIGNIFICAND_WIDTH - 2
                + FloatConsts.EXP_BIAS) - biasedExp;
        if ((shift & -32) == 0) { // shift >= 0 && shift < 32
            
            int r = ((intBits & FloatConsts.SIGNIF_BIT_MASK)
                    | (FloatConsts.SIGNIF_BIT_MASK + 1));
            if (intBits < 0) {
                r = -r;
            }
      
            return ((r >> shift) + 1) >> 1;
        } else {
       
            return (int) a;
        }
    }
[/size][size=4]

//{:8_525:} 源码根据各种位运算,很复杂,总之记住  当Math.round(a); 传入的是负数,就要遵循 5舍6入的法则;

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





9 个回复

倒序浏览
研究这个问题首先要搞清楚  四舍五入的  舍和入 是什么意思;
在数学上就是  舍,减少这个值的小数部分,让这个数值变小;  入就是增加这个值的大小;
依据0为中点,正数中的四舍五入就对应的是负数小数部分[0.6-0.999999999]的部分;
这样理解下来就通顺了,因为在数学上就是如此;

QQ截图20161203212255.jpg (46.75 KB, 下载次数: 8)

QQ截图20161203212255.jpg
回复 使用道具 举报
dothings 发表于 2016-12-3 21:25
研究这个问题首先要搞清楚  四舍五入的  舍和入 是什么意思;
在数学上就是  舍,减少这个值的小数部分,让这 ...

谢谢!
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
回复 使用道具 举报
cumtwjc 发表于 2016-12-3 22:49
太难了   看不懂

哪里看不懂?我讲你听
回复 使用道具 举报
cumtwjc 发表于 2016-12-3 22:49
太难了   看不懂

知道意思就行了,源代码确实难理解,功力不够
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
昨天表达稍有问题,正确理解下来应该在负数区是  四入五舍,当然前提是分清楚入和舍;

QQ截图20161204195132.jpg (49.42 KB, 下载次数: 8)

QQ截图20161204195132.jpg
回复 使用道具 举报
dothings 发表于 2016-12-4 19:51
昨天表达稍有问题,正确理解下来应该在负数区是  四入五舍,当然前提是分清楚入和舍; ...

又凌乱了 。。。。。  -11.500000001 怎么就-12了   
回复 使用道具 举报
更新错,小于或者等于5舍去  大于5就进1
回复 使用道具 举报
-11.5小于  -11  所以这是入;
-11.50000000001大于  -12   所以这是舍;

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