理解Java中的强制转换
这是我在这里的第一篇帖子,我想感谢所有能够帮助我解决这个简单问题的人: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
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));