浮动分割错误的四舍五入

时间:2015-04-24 08:45:32

标签: java math rounding wrapper long-integer

今天我正在做一些算术程序,我得到了一个真正有趣的结果,将浮动除法的结果传递给了一个二传手:

class A {
 Float f;
 setF(Float f) {
    this.f=f;
    print (f)
  }
}

 Long x=7L;
 Long y=3L;

 print (x/y.floatValue() )

 a.setF(x/y.floatValue());

上面的伪程序的结果在jdk 1.6

中是这样的
2.333333
2.0

关于进行回合的任何线索?

3 个答案:

答案 0 :(得分:1)

让我解释你的第一个条件,即`x / y.floatValue()'你在做什么:

long/ float,因为您从float value方法的变量y中获取floatValue(),因此根据其实现,您将获得y = 3.0F。

/**
 * Returns the value of this {@code Long} as a
 * {@code float}.
 */
public float floatValue() {
    return (float)value;
}

您的部门将7L/ 3F或说7/ 3.0,这将为您提供2.333333

的结果

您的第二个条件a.setF(x/y.floatValue());也会2.333333检查您是否遗漏了某些内容或发布了整个代码。

enter image description here

正如您在控制台标题中看到的,我正在使用JDK1.6

答案 1 :(得分:0)

这是一个铸造问题。您的x仍然是类型长,而y.floatValue()是浮点数。

除数和被除数都需要浮点数或双倍才能得到你想要的东西,所以试试这个:

    Long x=7L;
    Long y=3L;

    System.out.println((float) x/(float) y);

结果 - > 2.3333333

答案 2 :(得分:0)

这种向下舍入到2.0不会发生,你从伪代码编写代码的方式可能有问题

我测试了这个实现

public class A {

Float f;

void setF(Float f){
    this.f=f;
    System.out.println(f);
}

public static void main(String[] args) {
    Long x=7L;
    Long y=3L;
    System.out.println(x/y.floatValue());
    new A().setF(x/y.floatValue());
}

}

这是结果

2.3333333
2.3333333