可能重复:
为什么 1/3=0 在 java 中的结果?
我正在使用 java,我的部分代码需要一个数字除以 10。为了简化(并显示我的问题),我只是将它放入 println:
System.out.println(1/10);
打印出 0。所以,从逻辑上讲,我认为它正在将其转换为 int,所以我尝试了
System.out.println((double)1/10);
并打印出正确的0.1。我不明白为什么它第一次自动将其转换为 int 。它还能在哪里做到这一点?为什么?
可能重复:
为什么 1/3=0 在 java 中的结果?
我正在使用 java,我的部分代码需要一个数字除以 10。为了简化(并显示我的问题),我只是将它放入 println:
System.out.println(1/10);
打印出 0。所以,从逻辑上讲,我认为它正在将其转换为 int,所以我尝试了
System.out.println((double)1/10);
并打印出正确的0.1。我不明白为什么它第一次自动将其转换为 int 。它还能在哪里做到这一点?为什么?
1
is an int
and10
是int
and 当你这样做时,int/int
你得到一个int
.
如果你这样做1.0/10
or1/10.0
或者1.0/10.0
你会得到一个 double as0.1
恕我直言:如果你想要整数除法,我认为int/int
应该是一个double
你可以转换的。int
IE
我会
a/b // does double division
(int)(a/b) // does integer division.
相反,你必须写
a/b // does integer division
(double) a/b // does double division
它不会转换为 int,它已经是 int。int / int 是 int。
另请注意,当您像 in 一样转换为 double 时(double)1/10
,由于转换运算符的优先级高于除法,这与 相同((double)1)/10
,这具有导致除法在 double 中发生的效果。
如果你在除法之后施法(double)(1/10)
,结果将是 0.0 。
其中一个数字必须是浮点数或双精度数,因此请尝试:
System.out.println(1/10.0);
System.out.println(1/(double)10);
System.out.println(1.0/10);
1 是整数,10 是整数,所以默认情况下除法是整数,因此一除以 10 得到零,余数为 1。
这是因为,由于两个操作数都是整数,所以会进行整数除法,而 1 除以 10 的整数除法结果是整数,在本例中为 0。
在第二种情况下,由于一个参数是双精度数,除数也转换为双精度数,结果将是双精度数。
您还可以执行以下操作之一:
System.out.println(1.0 / 10);
System.out.println(1 / 10.0);
System.out.println(1.0 / 10.0);
问题是这1 / 10
是一个int
表达式,而您的第二个版本和上述每个版本都不是。
并不是它把它转换成一个 int——而是它总是一个 int。当算术在两个整数之间时,结果是整数算术定义的整数:http: //docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.2