Kotlin:双精度值为“a”的条件;“正常”;数
如何测试Kotlin中Double类型的值是否为空Kotlin:双精度值为“a”的条件;“正常”;数,kotlin,double,nan,infinity,defensive-programming,Kotlin,Double,Nan,Infinity,Defensive Programming,如何测试Kotlin中Double类型的值是否为空 Double.POSITIVE_∞,Double.NEGATIVE_∞,Double.NaN还是其他特殊值 我想要一些类似于require(Double.isNormal(x)) require(x.isFinite())就是您所需要的。听起来您已经回答了自己的问题。。。。编写一个函数,检查这3种情况,并在满足前提条件时运行lambda: fun ifNormal(double: Double, toDo: () -> Unit) {
Double.POSITIVE_∞,Double.NEGATIVE_∞,Double.NaN
还是其他特殊值
我想要一些类似于require(Double.isNormal(x))
require(x.isFinite())
就是您所需要的。听起来您已经回答了自己的问题。。。。编写一个函数,检查这3种情况,并在满足前提条件时运行lambda:
fun ifNormal(double: Double, toDo: () -> Unit) {
if (double != Double.POSITIVE_INFINITY
&& double != Double.NEGATIVE_INFINITY
&& double != Double.NaN) {
toDo()
}
}
然后像这样使用它:
ifNormal(1.0) {
// Do stuff
}
我想我会使用@al3c的解决方案,但是看看如何使用函数参数也很好。不会想到的。不用担心,他们的答案更直接地回答了你的问题,这是公平的。我认为
加倍!=Double.NaN
将始终返回true,因为NaN应与任何Double进行比较,包括NaN。很公平,我只是回答了OP问题,没有进行移植以检查所有3个条件的实际意义问题是d==Double.NaN
为false(并且!=
为true)。这就是NaN
基本上在每种语言中的工作方式。这就是为什么有一个单独的d.isNaN()
。