提问人:Moritz Groß 提问时间:6/22/2020 更新时间:6/22/2020 访问量:593
Kotlin:双精度值为“正常”数字的条件
Kotlin: Condition that double-value is a "normal" number
问:
如何测试 Kotlin 中 Double 类型的值是否不是或其他特殊值?Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN
我想要类似的东西require(Double.isNormal(x))
答:
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
!=
NaN
d.isNaN()
评论