kotlin NaN坑

2022-11-03

kotlin

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

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

debug一看,发现值为NaN

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

1
2
3
4
val nan = 0.0 / 0.0
nan.toBigDecimal() // java.lang.NumberFormatException

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

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

所以上述代码可以改为

1
2
val nan = 0.0 / 0.0
nan.takeUnless { it.isNaN() }?.toBigDecimal() // null