2014-02-09 37 views
3

今天早些时候我注意到了一些奇怪的事情。我正在编写一些应该在复杂象限中制作图表的代码。无论如何,我输入int i = 1/0;,它不会编译。当我将代码更改为double i = 1.0/0.0;时,代码编译得很好。当我运行代码时,它给出了一个错误/ 0。我期待着那个......但是为什么在使用双精度而不是整数时它编译得很好?我正在使用Blue J IDEJava与数学的“错误” - int vs Double

+1

他们都编译对我很好,和INT版本抛出一个错误,这是因为据我所知预期行为。你确定你没有把它们混淆在你的脑海中吗? – Vitruvius

+0

我认为更好的解释可以在这里找到:http://stackoverflow.com/questions/2381544/why-doesnt-java-throw-an-exception-when-dividing-by-0-0 –

+0

第三个问题: http://stackoverflow.com/questions/21380499/is-this-declaration-possible/21380590 – Radiodef

回答

4

int值除以零将导致ArithmeticException,因此表达式1/0是非法的。

除以零一个double值的结果是无穷大NaN*,所以表达式1.0/0.0是合法的。


*)查看t_over的评论的细节:

+1

只需添加..除以0.0的负数等于负的无穷大,并将零除零导致Double.NaN –

+0

谢谢@t_over我赞赏额外的澄清:) – ChriskOlson