为什么我需要在值中添加'f',以便我的代码输出正确的值?

时间:2014-02-06 05:34:12

标签: java double

以下是我的代码::

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,我是一时兴起的。我认为将两个变量声明为双精度就足够了吗?

3 个答案:

答案 0 :(得分:1)

在Java中,18.45是double数据类型,其中包含64-bitfloat数据类型最多只能容纳32-bit。添加额外的f使它成为一个浮点(float literal)。

有关详细信息,请参阅http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

答案 1 :(得分:1)

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

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

您追加的f后跟3f3600f浮点文字。这接近你想要的,但不如双打。

答案 2 :(得分:0)

double minutes;
minutes = 2/3;

此代码采用两个整数,将它们分开,将结果转换为double,并以分钟为单位存储。以该顺序。要获得您想要的结果,您需要在分割发生之前转换为双精度数。你设法通过添加f(使用d表示double,btw)来完成此操作。您也可以使用minutes = 2.0/3.0;

执行此操作