开始在遇到这种情况之后一直觉得很奇怪,你说分母为0,分子为int类型或者char或者long或者short类型的数据得到的结果为异常
Exception in thread "main" java.lang.ArithmeticException: / by zero
但是为什么分子为float类型或者double类型的数据结果就是Infinity呢?
先上代码:
public class HelloWorld {
public static void main(String args[]) {
try {
double m = 3.14/0;
float n = (float) (325.14/0);
System.out.println("float类型的结果为:"+n);
System.out.println("double类型的结果为:"+m);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
输出结果为:
float类型的结果为:Infinity
double类型的结果为:Infinity
这是为什么呢:为什么会是无穷大呢?
原来,在计算机中的0是使用的一个非常接近于0的小数来表示的,在整除整数时,除数0为整数,故而违反了数学定义,会出错,而在被除数为float或者double时,此时的除数0为一个非常接近于0的小数但却并非为0,故而结果为无穷大,因此结果为Infinity。
从以下可以看出在计算机中0是一个无限接近于0的小数
public class HelloWorld {
public static void main(String args[]) {
try {
// double m = 3.14/0;
// float n = (float) (325.14/0);
// System.out.println("float类型的结果为:"+n);
// System.out.println("double类型的结果为:"+m);
int s = 20;
System.out.println(s/0f);
System.out.print(s/0d);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
结果为
Infinity
Infinity
是不是感觉很奇妙?