前面介绍了Java编程的四则运算,虽然提供了基础的加减乘除符号,可是数学上还有其它运算符号,包括四舍五入用到的约等号≈、求绝对值的“| |”、开平方的“√ ̄”,这些运算符形态万千,并且并不是ASCII码的基本字符,也就意味着它们没法原样搬到Java来。
为此,Java的设计师封装了一套数学函数库Math,把加减乘除之外的常见数学运算都归入,而后做为Math库的函数方法提供给程序员调用。好比四舍五入变成了Math库的round方法,取绝对值变成了Math库的abs方法,Math库另外提供了取整方法floor和ceil。其中floor方法指的是将变量往下取整,也就是往数值小的方向取整;ceil方法指的是将变量往上取整,也就是往数值大的方向取整。
须要注意的是,若是变量值为负数(假设x=-9.9),那么对x作floor取整将获得-10,对x作ceil取整将获得-9,这种状况与常人理解的正数取整并不相同。假设变量值为正数(如x=9.9),则对x作floor向下取整将获得9,对x作ceil向上取整将获得10。负数的取整结果看似有悖常理,其实彻底没有毛病,由于floor方法取的是数值更小的整数,而ceil方法取的是数值更大的整数。既然-10<-9.9<-9,因而floor取整获得了数值更小的-10,而ceil取整获得了数值更大的-9。若想眼见为实的话,则可运行下面的测试代码加以验证:java
double decimalPositive = 9.9; // 四舍五入 long roundPositive = Math.round(decimalPositive); System.out.println("roundPositive="+roundPositive); // 往下取整,也就是往数值小的方向取整 double floorPositive = Math.floor(decimalPositive); System.out.println("floorPositive="+floorPositive); // 往上取整,也就是往数值大的方向取整 double ceilPositive = Math.ceil(decimalPositive); System.out.println("ceilPositive="+ceilPositive); double decimalNegative = -9.9; // 四舍五入 long roundNegative = Math.round(decimalNegative); System.out.println("roundNegative="+roundNegative); // 往下取整,也就是往数值小的方向取整 double floorNegative = Math.floor(decimalNegative); System.out.println("floorNegative="+floorNegative); // 往上取整,也就是往数值大的方向取整 double ceilNegative = Math.ceil(decimalNegative); System.out.println("ceilNegative="+ceilNegative); // 取绝对值 double absoluteValue = Math.abs(decimalNegative); System.out.println("absoluteValue="+absoluteValue);
科学计算上经常还须要开平方、幂运算、求对数等复杂函数,Java自带的Math库也提供了相应的方法,例如sqrt方法对应开平方运算,pow方法对应求某数的n次方,exp方法对应求天然常数e的n次方,log方法对应求天然对数的运算(即exp方法的逆运算),log10方法对应求底数为10的对数。这些方法的详细调用代码以下所示:程序员
double nine = 9; // 开平方。对应数学符号√ ̄ double sqrt = Math.sqrt(nine); System.out.println("sqrt="+sqrt); // 求n次方。pow的第一个参数为幂运算的底数,第二个参数为幂运算的指数 double pow = Math.pow(nine, 2); System.out.println("pow="+pow); double five = 5; // 求天然常数e的n次方 double exp = Math.exp(five); System.out.println("exp="+exp); // 求天然对数,为exp方法的逆运算。对应数学函数lnN double log = Math.log(exp); System.out.println("log="+log); // 求底数为10的对数。对应数学函数logN double log10 = Math.log10(100); System.out.println("log10="+log10);
除了代数运算的常见函数以外,Math库还提供了几何方面的三角函数运算,包括正弦、余弦、正切、反正弦、反余弦、反正切都能找到对应的Math方法。不过Math库的三角方法与几何上的三角函数用法有所不一样,几何的三角函数如sin、cos,后面跟着角度的数值,而Math库的三角方法跟着是弧度的数值。所谓弧度指的是该角度对应的圆弧长度比去圆的半径,即:弧度=弧长/半径=(角度/360)*2πr/r=角度*π/180。搞清楚了弧度与角度之间的关系,利用Math库进行各类三角运算就简单了,下面是这些三角方法的调用代码例子:编程
// 三角函数的角度 double angle = 60; // 弧度=该角度对应的弧长/半径 double radian = angle*Math.PI/180; // 求某弧度的正弦。求反正弦要调用asin方法 double sin = Math.sin(radian); System.out.println("sin="+sin); // 求某弧度的余弦。求反余弦要调用acos方法 double cos = Math.cos(radian); System.out.println("cos="+cos); // 求某弧度的正切。求反正切要调用atan方法 double tan = Math.tan(radian); System.out.println("tan="+tan); // 求某弧度的余切。Math库未提供求余切值的方法,其实余切值就是正切值的倒数 double ctan = 1.0/tan; System.out.println("ctan="+ctan);