Java 为什么(int)(2/0.9)=2?
我把它放到java中,结果是2。我想知道为什么它不是一个算术异常,因为(int)(2/0.9)不应该变成2/0。感谢所有的帮助 您的代码是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... 此过程称为数字提升(此处使用加宽原语转换)。发件人: 数值提升是一个过程,通过该过程,给定算术运算符及其参数表达式,参数
(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非常感谢:)