以下是我的代码::
public class AvgSpeed{
public static void main(String[] args){
double kph, km, hours, seconds, minutes, time;
km = (1.6 * 24);
hours = 1;
minutes = 2/3f;
seconds = 35/3600f;
time = hours + minutes + seconds;
kph = km/time;
System.out.println(kph);
}
}
如果我将f删除了几分钟和几秒钟,它会一直打印出38.4,这是不对的。它应该是一些接近22.906的数字
我甚至不知道为什么我需要添加f,我是一时兴起的。我认为将两个变量声明为双精度就足够了吗?
答案 0 :(得分:1)
在Java中,18.45是double
数据类型,其中包含64-bit
。 float
数据类型最多只能容纳32-bit
。添加额外的f使它成为一个浮点(float literal)。
有关详细信息,请参阅http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
答案 1 :(得分:1)
将变量声明为双精度不会使2
或3
变为双精度。只有在整数算术中计算2/3
后才会转换为double。要解决此问题,请使用双算术进行计算:
minutes = 2.0/3;
// ^ double
seconds = 35.0/3600;
// ^ double
您追加的f
后跟3f
和3600f
浮点文字。这接近你想要的,但不如双打。
答案 2 :(得分:0)
double minutes;
minutes = 2/3;
此代码采用两个整数,将它们分开,将结果转换为double,并以分钟为单位存储。以该顺序。要获得您想要的结果,您需要在分割发生之前转换为双精度数。你设法通过添加f(使用d表示double,btw)来完成此操作。您也可以使用minutes = 2.0/3.0;