This question already has answers here:
Why does the division of two integers return 0.0 in Java? [duplicate]
                                
                                    (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就足够了吗?

最佳答案

将变量声明为双精度型不会使23变为双精度型。仅在使用整数算术运算出2/3之后,才会转换为double。要解决此问题,请使用双重算法进行计算:

        minutes = 2.0/3;
        //         ^ double
        seconds = 35.0/3600;
        //         ^ double


您附加的尾随f构成了3f3600f浮点文字。那接近您想要的,但不及双倍。

10-04 11:32
查看更多