与math.round()混淆

时间:2012-02-11 14:02:47

标签: java

以下是我困惑的一些代码:

public class MathOpration {  
   public static void main(String args[])  
   {  
       float F1 = -5.5f;   
float F2 = 5.5f;   
float F3 = -5.49f;   
float F4 = 5.49f;   
System.out.println("Round F1 is " + Math.round(F1));   
System.out.println("Round F2 is " + Math.round(F2));   
System.out.println("Round F3 is " + Math.round(F3));   
System.out.println("Round F4 is " + Math.round(F4));   

   }  
}  

以上是:

Round F1 is -5
Round F2 is 6
Round F3 is -5
Round F4 is 5 

我的困惑是如何-5成为F1的输出?

任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:3)

请阅读round的文档:

  

换句话说,结果等于表达式的值:

(int)Math.floor(a + 0.5f)

这解释了为什么-5.5f轮到-5,但5.5f轮到6轮。(floor给出“返回最大(最接近正无穷大)的双倍值不大于参数和等于数学整数。“。)

答案 1 :(得分:2)

-6 is less than -5

当你向上看时,你会上升。

答案 2 :(得分:0)

  

我怀疑-5是如何成为F1的输出?

.5总是四舍五入。

由于-5.5是负数,所以它向上舍入到-5。

答案 3 :(得分:0)

如果结果不符合您的要求,您可以根据需要进行舍入。看看这个舍入的小解释。

http://mathforum.org/library/drmath/view/71202.html

答案 4 :(得分:0)

有时更快的等价物是

long l = (long) (f + 0.5);