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

Kotlin: Condition that double-value is a "normal" number

提问人:Moritz Groß 提问时间:6/22/2020 更新时间:6/22/2020 访问量:593

问:

如何测试 Kotlin 中 Double 类型的值是否不是或其他特殊值?Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN

我想要类似的东西require(Double.isNormal(x))

Kotlin NAN Infinity 防御性编程

评论


答:

9赞 al3c 6/22/2020 #1

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/is-finite.html

require(x.isFinite())是你需要的。

1赞 Thomas Cook 6/22/2020 #2

听起来你已经回答了自己的问题......编写一个函数来检查这 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
}

评论

1赞 Moritz Groß 6/22/2020
我想我会选择@al3c的解决方案,但看看如何使用函数式参数也很好。不会想到这一点。
0赞 Thomas Cook 6/22/2020
不用担心,为了公平起见,他们的回答更直接地解决了您的问题。
2赞 al3c 6/22/2020
我认为将始终返回 true,因为 NaN 应该与任何 Double 进行比较,包括 NaN。double != Double.NaN
0赞 Thomas Cook 6/22/2020
公平地说,我只是在回答 OP 问题,没有进行移植以检查所有 3 个条件是否真正有意义
1赞 Alexey Romanov 6/23/2020
问题是,这是错误的(并且是真的)。基本上每种语言都是这样工作的。这就是为什么有一个单独的.d == Double.NaN!=NaNd.isNaN()