Java 为什么(int)(2/0.9)=2?

Java 为什么(int)(2/0.9)=2?,java,casting,arithmeticexception,Java,Casting,Arithmeticexception,我把它放到java中,结果是2。我想知道为什么它不是一个算术异常,因为(int)(2/0.9)不应该变成2/0。感谢所有的帮助 您的代码是 (int) (2 / 0.9) 因此int-cast仅应用于计算2/0.9后的结果。现在2/0.9将int除以double值。在这种情况下,int也将被解释为double(2.0)。结果是这样的 2.0 / 0.9 = 2.22... 此过程称为数字提升(此处使用加宽原语转换)。发件人: 数值提升是一个过程,通过该过程,给定算术运算符及其参数表达式,参数

我把它放到java中,结果是2。我想知道为什么它不是一个算术异常,因为(int)(2/0.9)不应该变成2/0。感谢所有的帮助

您的代码是

(int) (2 / 0.9)
因此
int
-cast仅应用于计算
2/0.9
后的结果。现在
2/0.9
int
除以
double
值。在这种情况下,
int
也将被解释为
double
2.0
)。结果是这样的

2.0 / 0.9 = 2.22...
此过程称为数字提升(此处使用加宽原语转换)。发件人:

数值提升是一个过程,通过该过程,给定算术运算符及其参数表达式,参数将转换为推断的目标类型
T
<代码>T在升级过程中被选择,这样每个参数表达式都可以转换为
T
,并且为
T
类型的值定义了算术运算

之后,您将强制转换为
int
,在本例中,该值将舍入到下一个较低的整数
2
。因此,结果是
2


您所期望的将是以下表达式的结果

2 / (int) 0.9
// or more explicit:
2 / ((int) 0.9)
它首先在除法之前将
0.9
强制转换为
int
。在这种情况下,您将正确地得到

2 / 0

产生预期的
算术异常

0.9是一个浮点,因此2被提升(或解释为)一个浮点,然后进行除法。结果当然会被转换为int@MatthewFenel<代码>(2/0.9)在括号中否?哦,好的,谢谢!这只是为了计算机科学lol。括号比计算机科学“稍微”古老,有几百年的历史,并且很容易理解sense@zzxyz实际上,
0.9
是双精度的,而不是浮点数。@AndrewThompson非常感谢:)