Java程序算法运算结果,

System.out.println("17.0/0="+17.0/0)为何结果是无穷大而System.out.println("17/0="+17/0)会编译报错?

17.0是double类型,而0是int类型,17.0/0 ,根据类型转换,0会自动转换为double类型,既0.0

这个涉及到计算机底层对于数据存储的算法,对于计算机来说,只不过是不同的计算底层计算方式而已,要仔细说的话,就比较麻烦了

纠正一下System.out.println("17/0="+17/0);这行代码不会包编译错的,但是运行时会报异常的:

 Exception in thread "main" java.lang.ArithmeticException: / by zero
    at test.CompilerTest.main(CompilerTest.java:5)

第二个很容易理解,抛出被除数为0的异常。并不是编译出错。解释是,计算机无法保存一个无穷大的数(内存溢出),所以会抛出异常,至于double,只能说它和int类型运算方式可能不一样,又或者是java自己的原因,这就不得而知了。

System.out.println("17.0/0="+17.0/0) 17.0是double,0是int会自动进行类型转换,
实际上double是有精度问题的,double0并不是真正的0.0,可能是0.000000000000000005,除以一个很小的数,商自然会无穷大

System.out.println("17/0="+17/0) 17是整数0也是整数,不会有类型转换,但是整数0不能做除数会抛出异常