本帖最后由 风云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;
|