了解在Java中铸造
这是我的第一篇文章,我想感谢所有可以帮助我解决这个简单问题的人:如何在Java中进行铸造?了解在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));
}
}
,并在执行时(官方JDK linux下的32位机上6个U26)
0
0
0.0
0.0
的这个软件给我这个输出问题,或者我不明白的事情,如果你愿意的话,最后2个结果是0.0,我期待类似0.3333333的东西,但显然这个演员阵型的工作方式是另一种方式:怎么样?
感谢
PS 我不太熟悉的英语,如果我犯了一些错误,这
首先,表达1/3
被执行。这个表达意味着“1除以3的整数除法”。其结果是整数0
。然后这个结果(0
)被转换为双精度(或浮点数)。当然它会导致0.0
。
您必须转换事业部的一个操作数为双(或浮动),把它改造成一个双师:
double d = ((double) 1)/3;
或者干脆写
1.0/3
如果您使用操作/
整数值我道歉,结果将被输入作为整数。
您将不得不强制将1或3设置为浮点值 - 请尝试编写1.0/3
而不是1/3
。
在最后2个例子中,你首先计算1/3,这是0.然后你把它投到浮点/双精度上。 使用:
((float)1)/3
int值coverted成双。
(1/3)的类型为int所以答案是0
现在0铸造翻番或浮动,因此已变为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是整数文字,所以除法结果将被截断。要使用float和double文字,在数字的末尾放置一个f或d(1.0f,1.0d)。铸造会影响它后面的值,所以如果你的值在括号内,它会评估这个值,然后进行转换。