引言

要想使用 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的标准进行取余。

类库里还有其他方法:

方法名

解释

ceil(double a)

返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。-3.1->-3.0;3.1->4.0

floor(double a)

返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。

round(float a)

最接近参数的 int

round(double a)

最接近参数的 long

rint(double a)

返回最接近参数并等于某一整数的 double 值

round(double a)

返回带正号的 double 值,该值大于等于 0.0 且小于 1.0