Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解Java中的强制转换_Java_Casting_Floating Point_Double_Precision - Fatal编程技术网

理解Java中的强制转换

理解Java中的强制转换,java,casting,floating-point,double,precision,Java,Casting,Floating Point,Double,Precision,这是我在这里的第一篇帖子,我想感谢所有能够帮助我解决这个简单问题的人:java中的角色转换是如何工作的 我做了一个非常简单的课程: public class test { public static void main ( String[] args ) { System.out.println((short)(1/3)); System.out.println((int)(1/3)); System.out.println((fl

这是我在这里的第一篇帖子,我想感谢所有能够帮助我解决这个简单问题的人:java中的角色转换是如何工作的

我做了一个非常简单的课程:

public class test {
    public static void main ( String[] args )
    {
        System.out.println((short)(1/3));
        System.out.println((int)(1/3));
        System.out.println((float)(1/3));
        System.out.println((double)(1/3));
    }
}
这个软件在执行时给我这个输出(linux下32位机器上的官方JDK 6 u26)

问题是,如果你愿意的话,我不明白的是,最近两次的结果是0.0,我期望的是0.3333333,但很明显,演员阵容以另一种方式工作:如何

谢谢

PS
我对英语不太熟悉,如果我犯了一些错误,我对此表示歉意。

如果您对整数值使用运算符
/
,结果将被键入整数


您必须将1或3强制为浮点值-尝试写入
1.0/3
,而不是
1/3
,在最后两种情况下,您首先计算1/3,即0。然后将其转换为浮动/双精度。 使用:


首先,执行表达式
1/3
。此表达式表示“1除以3的整数”。其结果是整数
0
。然后将该结果(
0
)转换为双精度(或浮点)。当然,它会导致
0.0

必须将除法的一个操作数强制转换为双精度(或浮点),才能将其转换为双精度除法:

double d = ((double) 1) / 3;
或者干脆写

1.0 / 3

int被转换成double

(1/3)为int类型,因此答案为0


现在0被强制转换为double或float,因此它变成了0.0。您需要强制转换操作数,而不是结果。这将产生您期望的输出:

System.out.println(((short) 1 / (short) 3));
System.out.println((1 / 3));
System.out.println(((float) 1 / (float) 3));
System.out.println(((double) 1 / (double) 3));

因为括号中有1/3,所以它使用整数除法,然后强制转换为指定的类型。如果使用1.0/3.0或(float)1/3,它将计算为.3333333。1和3是整数文本,因此除法的结果将被截断。要使用浮点和双字面值,请在数字(1.0f,1.0d)的末尾加一个f或d。强制转换会影响后面的值,因此如果您的值在括号中,它将计算该值,然后进行强制转换

1.0 / 3
System.out.println(((short) 1 / (short) 3));
System.out.println((1 / 3));
System.out.println(((float) 1 / (float) 3));
System.out.println(((double) 1 / (double) 3));