美文网首页编程学习笔记
System.out.println(1.0 / 0); 为什么

System.out.println(1.0 / 0); 为什么

作者: 烛火的咆哮 | 来源:发表于2018-12-29 12:36 被阅读23次

遇到了一个简单的细节, 做个记录,直接贴代码

    System.out.println(1.0 / 0);
    //下面报错
    System.out.println(1 / 0);
  • int型数据,除0会发生报错,信息如下:
Infinity
Exception in thread "main" java.lang.ArithmeticException: / by zero
    at leetcode_normal.Test1.main(Test1.java:111)
  • 然而,System.out.println(1.0 / 0);为什么返回值会是Infinity
  • 各种查找得,Infinity表示无穷大,java中,只有浮点类型数据存在这种表达形式, 其他类型都有明确的数据范围
  • 当double类型数据除int类型数据时,隐式类型转换,int类型->double类型,即System.out.println(1.0 / 0);转为为System.out.println(1.0 / 0.0);.
  • 而浮点运算0.0作为除数时,会转为一个无限接近于0的小数,而不是彻底的zero,

再贴一下完整的代码

    System.out.println(1.0 / 0);
    System.out.println(1.0 / 0.0);
    System.out.println((long)(1.0 / 0.0));
    System.out.println(1 / 0);
Infinity
Infinity
Exception in thread "main" java.lang.ArithmeticException: / by zero
    at leetcode_normal.Test1.main(Test1.java:112)
9223372036854775807
  • 可以看到, double/0与double/0.0结果都为无穷大,
  • 用long返回可以得到一个非常非常大的数字
  • 另外,double源码中有关无穷大与无穷小的定义为
    public static final double POSITIVE_INFINITY = 1.0 / 0.0;
    public static final double NEGATIVE_INFINITY = -1.0 / 0.0;

相关文章

网友评论

    本文标题:System.out.println(1.0 / 0); 为什么

    本文链接:https://www.haomeiwen.com/subject/vkmulqtx.html