混淆数学.round()

hgb9j2n6  于 2022-10-22  发布在  Java
关注(0)|答案(5)|浏览(142)

下面是一些我混淆的代码:

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的输出?
任何帮助都将不胜感激。

rjzwgtxy

rjzwgtxy1#

请阅读round的文档:
换句话说,结果等于表达式的值:

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

这解释了为什么-5.5f舍入到-5,而5.5f则舍入到6。(floor给出“返回不大于参数且等于数学整数的最大(最接近正无穷大)双精度值。”)

bvuwiixz

bvuwiixz2#

-6 is less than -5

当你围起来的时候,你就上去了。

at0kjp5o

at0kjp5o3#

我的疑问是-5是如何成为F1的输出?
.5总是向上舍入。
由于-5.5是负数,所以它向上舍入为-5。

vmdwslir

vmdwslir4#

有时更快的等价物是

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

mwyxok5s5#

如果结果不是你想要的,你可以随意取整。看看这个关于舍入的小解释。
Link

相关问题