上QQ阅读APP看书,第一时间看更新
2.3.1 取整函数
虽然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。若想眼见为实,则可运行下面的测试代码加以验证(完整代码见本章源码的src\com\arithmetic\math\Trunc.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);