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

时间:2012-12-30 17:28:41

标签: java casting

  

可能重复:
  Why the result of 1/3=0 in java?

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

System.out.println(1/10);

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

System.out.println((double)1/10);

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

7 个答案:

答案 0 :(得分:12)

1int10int,当您int/int时,您会获得int

如果您执行1.0/101/10.01.0/10.0,您将获得双倍0.1

恕我直言:我认为int/int应该是double,如果你想进行整数除法,你可以投出int。即。

我会

 a/b          // does double division
 (int)(a/b)   // does integer division.

而你必须写

 a/b          // does integer division
 (double) a/b // does double division

答案 1 :(得分:6)

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

另请注意,当您在(double)1/10中强制转换为double时,由于强制转换运算符的优先级高于除法,因此它与((double)1)/10相同,这会导致除法发生双倍。

如果您在(double)(1/10)之后进行分割后,结果将为0.0。

答案 2 :(得分:3)

其中一个数字必须是浮点数或双数,所以请尝试:

System.out.println(1/10.0);
System.out.println(1/(double)10);
System.out.println(1.0/10);

答案 3 :(得分:2)

1是一个整数,10是整数,所以默认情况下除法是整数,因此除以10得到零,余数为1。

答案 4 :(得分:2)

这是因为,由于两个操作数都是整数,所以执行整数除法,1乘10的整数除法的结果是整数,在这种情况下为0。

在第二种情况下,由于一个参数是double,因此除数也会转换为double,结果将是double。

答案 5 :(得分:1)

您还可以执行以下操作之一:

System.out.println(1.0 / 10);
System.out.println(1 / 10.0);
System.out.println(1.0 / 10.0);

问题在于1 / 10int表达式,而您的第二个版本和上述每个版本都不是。

答案 6 :(得分:0)

并不是它将它转换为int - 它始终是一个int。算术在两个整数之间时,结果是整数算术定义的整数:http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.2