This question already has answers here:
Why does the division of two integers return 0.0 in Java? [duplicate]
(6个答案)
6年前关闭。
以下是我的代码:
如果我将f移开数分钟和数秒,它将继续打印38.4,这是不对的。应该是接近22.906的某个数字
我什至不知道为什么要加f,我一时兴起。我认为将两个变量声明为double就足够了吗?
您附加的尾随
(6个答案)
6年前关闭。
以下是我的代码:
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,我一时兴起。我认为将两个变量声明为double就足够了吗?
最佳答案
将变量声明为双精度型不会使2
或3
变为双精度型。仅在使用整数算术运算出2/3
之后,才会转换为double。要解决此问题,请使用双重算法进行计算:
minutes = 2.0/3;
// ^ double
seconds = 35.0/3600;
// ^ double
您附加的尾随
f
构成了3f
和3600f
浮点文字。那接近您想要的,但不及双倍。