1.0除以0未引发错误,我险些遭遇社会输送危机?

2026-05-23 23:581阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计639个文字,预计阅读时间需要3分钟。

1.0除以0未引发错误,我险些遭遇社会输送危机?

在项目中,我使用了错误的除法方法,没有抛出异常,程序运行正常,但数据异常。组长让我提交社区,老板说还可以再尝试一下,我们再来复盘这次错误。先让我们来试一下。

简言

在项目中,我使用了错误的除法,除零没有抛出错误,程序运行正常,但是数据异常。组长说要把我输送社会,老板说还可以挽留一下,我们来复盘一下这次错误。

先让我们来试一试

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 不要使用 ==

1.0除以0未引发错误,我险些遭遇社会输送危机?

本文共计639个文字,预计阅读时间需要3分钟。

1.0除以0未引发错误,我险些遭遇社会输送危机?

在项目中,我使用了错误的除法方法,没有抛出异常,程序运行正常,但数据异常。组长让我提交社区,老板说还可以再尝试一下,我们再来复盘这次错误。先让我们来试一下。

简言

在项目中,我使用了错误的除法,除零没有抛出错误,程序运行正常,但是数据异常。组长说要把我输送社会,老板说还可以挽留一下,我们来复盘一下这次错误。

先让我们来试一试

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 不要使用 ==

1.0除以0未引发错误,我险些遭遇社会输送危机?