今天我正在做一些算术程序,我得到了一个真正有趣的结果,将浮动除法的结果传递给了一个二传手:
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
关于进行回合的任何线索?
答案 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
检查您是否遗漏了某些内容或发布了整个代码。
正如您在控制台标题中看到的,我正在使用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