kotlin NaN坑

2022-11-22 14:15:57 浏览数 (1)

发脾气的人比被发脾气的对象所受的损失更大——霍姆斯

今天发现一个坑,在代码里尝试toBigDecimal抛出了NumberFormatException

debug一看,发现值为NaN

kotlin里,这样的代码会导致NaN

代码语言:javascript复制
val nan = 0.0 / 0.0
nan.toBigDecimal()		// java.lang.NumberFormatException

java.lang.Double.isNaN(nan) // true

最重要的是NaN,不会通过 安全调用操作符?. 的判断,因为其属于有值

所以上述代码可以改为

代码语言:javascript复制
val nan = 0.0 / 0.0
nan.takeUnless { it.isNaN() }?.toBigDecimal()		// null

0 人点赞