System.out.println(1/10)打印0?

r0n*_*0nk 1 java casting

可能重复:
为什么java中1/3 = 0的结果?

我正在使用java,我的部分代码需要一个数字除以10.为了简化(并显示我的问题)我只是将它放入println:

System.out.println(1/10);
Run Code Online (Sandbox Code Playgroud)

打印出来0.所以,从逻辑上讲,我认为它是将它转换为int,所以我尝试了

System.out.println((double)1/10);
Run Code Online (Sandbox Code Playgroud)

并打印出适当的0.1.我不明白为什么它会在第一次自动将它转换为int.还有什么地方呢?为什么?

Pet*_*rey 12

1是一个int并且10是一个intint/int你得到一个int.

如果你1.0/10或者1/10.0或者1.0/10.0你会得到一个双象0.1

恕我直言:如果你想要整数除法,我想int/int应该是double你可以投的一个int.即

我会

 a/b          // does double division
 (int)(a/b)   // does integer division.
Run Code Online (Sandbox Code Playgroud)

相反,你必须写

 a/b          // does integer division
 (double) a/b // does double division
Run Code Online (Sandbox Code Playgroud)

  • 吸引人的第一行+1 (3认同)

Eri*_*idt 6

它不会转换为int,它已经是int.int/int是int.

还要注意,当你转换为double时(double)1/10,由于强制转换操作符的优先级高于除法,因此它的含义相同((double)1)/10,这会导致除法发生在double中.

如果你在分割后施放(double)(1/10),结果将是0.0.