java直接输出0.1_震惊!System.out.println(1.0/0)竟然会正常输出

d15eeaa58098ec18b52836e513a26ed9.png

先让我们来试一试

package erdan.demo;

public class TestDouble {

public static void main(String[] args) {

System.out.println(1.0 / 0);

}

}

你认为的我认为的它应该会抛出  ArithmeticException 异常

但是它现在输出了 Infinity

1504f50d28b515c3c98b0d0a4e769ff5.png

为什么呢?

Double 数据类型支持无穷大

还有其他类型支持吗?

有,还有 Float

下面我们来查看 Double 源码,可以看到

/**

* 一个常数,保持类型的正无穷大

*/

public static final double POSITIVE_INFINITY = 1.0 / 0.0;

/**

* 一个常数,保持类型的负无穷大

*/

public static final double NEGATIVE_INFINITY = -1.0 / 0.0;

/**

* 一个常数,非数值类型

*/

public static final double NaN = 0.0d / 0.0;

下面来试验下 0.0/0 与 -1.0/0

Double 正无穷 = 1.0 / 0;

Double 负无穷 = -1.0 / 0;

System.out.println("正无穷:" + 正无穷);

System.out.println("负无穷:" + 负无穷);

Double 非数值 = 0.0 / 0;

System.out.println("非数值 0.0/0 ->" + 非数值);

输出:

正无穷:Infinity

负无穷:-Infinity

非数值 0.0/0 ->NaN

对无穷大进行运算

下面来测试对 Float 类型与 Doubloe 类型无穷大进行运算

public static void testFloatInfinity() {

Float infFloat = Float.POSITIVE_INFINITY;

Double infDouble = Double.POSITIVE_INFINITY;

System.out.println("infFloat + 5 = " + (infFloat + 5));

System.out.println("infFloat - infDouble = " + (infFloat - infDouble));

System.out.println("infFloat * -1 = " + (infFloat * -1));

}

输出:

infFloat + 5 = InfinityinfFloat - infDouble = NaNinfFloat * -1 = -Infinity

可以注意到 1,3 行运算符合我们的预计结果

ps: Infinity- Infinity 的结果不是数字类型

对这些值进行判断

public static void checkFloatInfinity() {

Double 正无穷 = 1.0 / 0;

Double 负无穷 = -1.0 / 0;

Double 非数值 = 0.0 / 0;

System.out.println("判断正无穷: " + Double.isInfinite(正无穷));

System.out.println("判断负无穷: " + (Double.NEGATIVE_INFINITY == 负无穷));

System.out.println("判断非数值(==): " + (Double.NaN == 非数值));

System.out.println("判断非数值(isNaN): " + Double.isNaN(非数值));

}

输出:

判断正无穷: true

判断负无穷: true

判断非数值(==): false

判断非数值(isNaN): true

ps: 判断 NaN 不要使用 ==

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值