Kotlin:双精度值为“a”的条件;“正常”;数

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) {

如何测试Kotlin中Double类型的值是否为空
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()