Math.round()的四舍五入问题

来源:互联网 发布:淘宝敲诈勒索 编辑:程序博客网 时间:2024/04/30 03:29

Math.round()的四舍五入问题

在java中我们通常用Math.round()来做四舍五入操作,但有时候结果却令人很难理解,例如下面的程序:

public static void main(String[] args) {

              System.out.println(Math.round(11.5));

              System.out.println(Math.round(-11.5));

       }

按照正常的理解,结果应该是12-12,但实际的输出却是:

12

-11

 

很显然这个结果与我们预想的结果有差别。那么问题出在哪呢?我们先看round()方法的底层实现:

               public  static  long  round(doublea) {
                              return (long)floor(a +0.5d);
           }

从代码中,我们可以看到round(a)实际上等于Math.floor(a+0.5)floor()方法意思是向下取整floor(a)得到的是不大于a最大整数。这个不大于就是上述问题产生的原因。round(-11.5)=floor(-11.5+0.5)=floor(-11.0),其结果便是-11(<=-11.0),而round(-11.6)=floor(-11.6+0.5)=floor(-11.1),其结果就是-12(<=-11.1)

 

其它:与floor()对应的还有ceil()方法,ceil(a)是取不小于a的最小整数。如:ceil(-11.4)=-11.0,ceil(-11.5)=-11.0,ceil(-11.6)=-11.0, ceil(-11.0)=-11.0

原创粉丝点击