震惊!System.out.println(1.0/0)竟然会正常输出
先让我们来试一试#
package erdan.demo;
public class TestDouble {
public static void main(String[] args) {
System.out.println(1.0 / 0);
}
}
你认为的我认为的它应该会抛出 ArithmeticException 异常
但是它现在输出了 Infinity
为什么呢?#
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 不要使用 ==
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
· 从 Windows Forms 到微服务的经验教训