ScalaDouble.isNaN
可以检测非数字,但不能Double.isInf
检测(正或负)无穷大。
为什么?我想检查一个参数是否是一个“实数”(即有一个数值)。将其转换为字符串并检查“inf”或其他东西会做到这一点,但必须有更好的方法吗?
就像在 C++ 中一样: http: //en.cppreference.com/w/cpp/numeric/math/isinf
使用 Scala 2.10
ScalaDouble.isNaN
可以检测非数字,但不能Double.isInf
检测(正或负)无穷大。
为什么?我想检查一个参数是否是一个“实数”(即有一个数值)。将其转换为字符串并检查“inf”或其他东西会做到这一点,但必须有更好的方法吗?
就像在 C++ 中一样: http: //en.cppreference.com/w/cpp/numeric/math/isinf
使用 Scala 2.10
ScalaDouble
有一个isInfinite
方法和Neg
/Pos
变体:
scala> val a = 22.0
a: Double = 22.0
scala> a.isInfinite
res0: Boolean = false
scala> val b = 2.0/0
b: Double = Infinity
scala> b.isInfinite
res1: Boolean = true
scala> b.isPosInfinity
res4: Boolean = true
其他人都说过,加上这个:分开的原因isNaN
是比较NaN
特殊:
scala> val bar = Double.NaN
bar: Double = NaN
scala> bar == Double.NaN
res0: Boolean = false
没有这样的规则适用于无穷大,所以不需要特殊的检查功能(除了为了处理符号的方便):
scala> val foo: Double = Double.PositiveInfinity
foo: Double = Infinity
scala> foo == Double.PositiveInfinity
res1: Boolean = true
方法其实是有的。它只是被称为isInfinity
而不是isInf
.
请参阅第 36 行的 scaladocs RichDouble
:https ://github.com/scala/scala/blob/v2.10.2/src/library/scala/runtime/RichDouble.scala#L36