了解Java中的Casting

use*_*992 4 java floating-point precision double casting

这是我在这里发表的第一篇文章,我要感谢能够帮助我解决这个简单问题的所有人:如何在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));
    }
}
Run Code Online (Sandbox Code Playgroud)

这个软件在执行时给我这个输出(linux下32位机器上的官方JDK 6 u26)

0
0
0.0
0.0
Run Code Online (Sandbox Code Playgroud)

问题,或者我不理解的事情,如果你愿意的话,最后2个结果是0.0,我期待的是0.3333333,但显然演员以另一种方式工作:怎么样?

谢谢

PS我不太熟悉英语,如果我犯了一些错误,我为此道歉

JB *_*zet 9

首先,1/3执行表达式.该表达意味着"1乘3的整数除法".它的结果是整数0.然后将此result(0)强制转换为double(或float).当然它会导致0.0.

您必须将除法的一个操作数强制转换为double(或float)以将其转换为双重除法:

double d = ((double) 1) / 3;
Run Code Online (Sandbox Code Playgroud)

或者简单地写

1.0 / 3
Run Code Online (Sandbox Code Playgroud)


Jea*_*nal 5

如果/对整数值使用运算符,则结果将输入为整数.

您必须强制将1或3强制为浮点值 - 尝试写入1.0/3而不是1/3.