这是我在这里发表的第一篇文章,我要感谢能够帮助我解决这个简单问题的所有人:如何在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.0
0.0
问题,或者我不理解的事情,如果你愿意的话,最后2个结果是0.0,我期待的是0.3333333,但显然演员以另一种方式工作:如何?
感谢
PS 我对英语不太熟悉,如果我犯了一些错误,我为此道歉
答案 0 :(得分:9)
首先,执行表达式1/3
。该表达意味着“1乘3的整数除法”。它的结果是整数0
。然后将此结果(0
)强制转换为double(或float)。当然,它会导致0.0
。
您必须将该分区的一个操作数强制转换为double(或float),以将其转换为双分割:
double d = ((double) 1) / 3;
或简单地写
1.0 / 3
答案 1 :(得分:5)
如果对整数值使用运算符/
,则结果将输入为整数。
您必须强制将1或3强制为浮点值 - 尝试编写1.0/3
而不是1/3
。
答案 2 :(得分:4)
在最后两种情况下,你首先计算1/3,即0.然后你将它投射到一个浮点数/双精度数。 使用:
((float)1)/3
答案 3 :(得分:1)
int转换为double。
(1/3)的类型为int,因此answer为0。
现在0被转换为double或float,因此它变为0.0
答案 4 :(得分:1)
你需要施放操作数,而不是结果。这将产生您期望的输出:
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));
答案 5 :(得分:1)
因为括号中有1/3,所以它使用整数除法然后转换为指定的类型。如果您使用1.0 / 3.0或(浮点)1/3,它将评估为.3333333。 1和3是整数文字,因此除法的结果将被截断。要使用float和double literals,请将f或d放在数字的末尾(1.0f,1.0d)。转换会影响它之后的值,因此如果您的值在括号中,它将评估该值,然后进行转换。