引言
要想使用 Math
那么要引入相关类库: import java.lang.Math
然而lang
包默认导入,所以可以不用显式的声明,但是如果常用包内的方法可以使用静态引用:import static java.lang.Math.*
。使用静态导入的好处在于不用重复的写包名,例如求勾股定理不使用静态导入:
double d = Math.sqrt(Math.pow(3,2)+Math.pow(4,2));
使用静态导入就会简洁很多:
double d = sqrt(pow(3,2)+pow(4,2));
事实上实现这个有个更加简单的方法:Math.hypot(3,4)
。
从某种严格意义上来说,这个类库不太严格,在某些地方会出现精度问题,但是在绝大多数的使用中,该精度问题的影响微乎其微,若追求严格精度的话,使用StrictMath
类库。
另外在Math
中所有的方法都是静态方法,其构造函数私有。
常用方法
学习一个新东西我个人觉得最好的学习方式就是:先学会怎么使用它,再了解他的内部实现。这里同样使用这种逻辑。
适用于int long float double
的方法。调用形式:abs(int a, int b)
方法名 | 解释 |
abs | 绝对值 |
max | 最大值 |
min | 最小值 |
适用于int long
这几个是java1.8新增的方法,主要是对一些 类型溢出异常进行抛出处理。调用形式:addExact(int a,int b)
方法名 | 解释 |
addExact | 加 |
substractExact | 减 |
multiplyExact | 乘 |
incrementExact | 自增 |
decrementExact | 自减 |
negateExact | 负运算:1->-1;-2->2 |
三角函数相关的double
,这里只部分罗列。调用形式:cos(double a)
cos,sin,tan,acos,asin,atan...
平方根:sqrt(double a)
立方根:cbrt(double a)
幂,指数,对数相关。除了pow(double a,double b)
,其余调用形式为log(double a)
方法名 | 解释 |
exp | 以自然对数e为底,求幂 |
expml | 以自然对数e为底的幂-1 |
log | 取自然对数e为底的对数 |
log10 | 取10为底的对数 |
取余的结果有很多标准。 Math.IEEEremainder(double a,double b)
使用的是IEEE的标准进行取余。
类库里还有其他方法:
方法名 | 解释 |
| 返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。 |
| 返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。 |
| 最接近参数的 |
| 最接近参数的 |
| 返回最接近参数并等于某一整数的 double 值 |
| 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0 |