震惊!System.out.println(1.0/0)竟然会正常输出

先让我们来试一试#

Copy
package erdan.demo; public class TestDouble { public static void main(String[] args) { System.out.println(1.0 / 0);  } }

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

但是它现在输出了 Infinity

为什么呢?#

Double 数据类型支持无穷大

还有其他类型支持吗?

有,还有 Float

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

Copy
/**    * 一个常数,保持类型的正无穷大   */ 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

Copy
Double 正无穷 = 1.0 / 0; Double 负无穷 = -1.0 / 0; System.out.println("正无穷:" + 正无穷); System.out.println("负无穷:" + 负无穷); Double 非数值 = 0.0 / 0; System.out.println("非数值 0.0/0 ->" + 非数值);

输出:

Copy
正无穷:Infinity 负无穷:-Infinity 非数值 0.0/0 ->NaN

对无穷大进行运算#

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

Copy
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)); }

输出:

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

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

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

对这些值进行判断#

Copy
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(非数值)); }

输出:

Copy
判断正无穷: true 判断负无穷: true 判断非数值(==): false 判断非数值(isNaN): true

ps: 判断 NaN 不要使用 ==

公众号

posted @   JavaPro  阅读(561)  评论(0编辑  收藏  举报
编辑推荐:
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
· 从 Windows Forms 到微服务的经验教训
豫ICP备19010929号
点击右上角即可分享
微信分享提示
CONTENTS