Math.round()方法即为我们常说的“四舍五入”方法,但用起来不注意的话就会犯错。

首先看下下面的几个结果:
Math.round(1.0)
Math.round(1.4)
Math.round(1.5)
Math.round(1.6)

结果分别为1,1,2,2。这没什么好说的。

那么如果传入的参数为负数呢?
Math.round(-1.0)
Math.round(-1.4)
Math.round(-1.5)
Math.round(-1.6)

结果分别为-1,-1,-1,-2。
注意Math.round(-1.5),也就是-1.5“四舍五入”的结果并不是-2,而是-1。这是为什么呢?

实际上,Math.round()方法准确说是“四舍六入”,5要进行判断对待。
Math.round()的原理是对传入的参数+0.5之后,再向下取整得到的数就是返回的结果,返回值为long型。这里的向下取整是说取比它小的第一个整数或者和它相等的整数。

因此Math.round(-1.5)的结果是-1.5 + 0.5 再向下取整,即-1.0取整,结果是-1.
Math.round(-1.4)的结果是 -1.4 + 0.5 即-0.9 向下取整,结果是-1。
同理,Math.round(1.5)即为 1.5 + 0.5 再向下取整,结果是2。

而“向下取整”实际上就是Math.floor()方法,注意Math.floor()返回的值为double类型的。
Math.floor(1.0) == 1.0
Math.floor(1.4) == 1.0
Math.floor(1.5) == 1.0
Math.floor(1.6) == 1.0
Math.floor(-1.0) == -1.0
Math.floor(-1.4) == -2.0
Math.floor(-1.5) == -2.0
Math.floor(-1.6) == -2.0

类似地,还有一个Math.ceil()方法,表示“向上取整”,得到的结果是比参数大的第一个整数或者和参数相等的数,返回值也是double类型的
Math.ceil(1.0) == 1.0
Math.ceil(1.4) == 2.0
Math.ceil(1.5) == 2.0
Math.ceil(1.6) == 2.0
Math.ceil(-1.0) == -1.0
Math.ceil(-1.4) == -1.0
Math.ceil(-1.5) == -1.0
Math.ceil(-1.6) == -1.0

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐