了解在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)。铸造会影响它后面的值,所以如果你的值在括号内,它会评估这个值,然后进行转换。