Kotlin中Double类型除以零返回NaN而非算术异常是否正确?
Kotlin Double类型除以零返回NaN的正确性说明
你观察到的行为是符合Kotlin设计规范的正确表现,具体原因如下:
- 核心原因是Kotlin的
Double、Float等浮点类型完全遵循IEEE 754浮点运算标准,该标准为浮点运算定义了NaN(非数值)、正负无穷等特殊边界值,明确要求浮点除以零的场景不抛出异常,而是返回对应特殊值:- 非零正数除以
0.0返回正无穷Infinity - 负数除以
0.0返回负无穷-Infinity 0.0除以0.0时返回NaN
- 非零正数除以
- 仅当用
Int、Long等整数类型执行除以零操作时,才会抛出ArithmeticException异常,因为整数类型没有定义上述特殊边界值。
你可以参考如下代码验证行为:
fun main() { println(5.0 / 0.0) // 输出 Infinity println(-3.2 / 0.0) // 输出 -Infinity println(0.0 / 0.0) // 输出 NaN // 整数除以零才会抛出异常 // println(5 / 0) // 运行抛出 ArithmeticException: / by zero }
如果需要处理这类边界场景,可以用Kotlin内置方法判断:
- 调用
Double.isNaN()判断值是否为NaN - 调用
Double.isInfinite()判断值是否为无穷值

内容的提问来源于stack exchange,提问作者facuhump
相关产品推荐
相关产品推荐

