15

ScalaDouble.isNaN可以检测非数字,但不能Double.isInf检测(正或负)无穷大。

为什么?我想检查一个参数是否是一个“实数”(即有一个数值)。将其转换为字符串并检查“inf”或其他东西会做到这一点,但必须有更好的方法吗?

就像在 C++ 中一样: http: //en.cppreference.com/w/cpp/numeric/math/isinf

使用 Scala 2.10

4

3 回答 3

24

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
于 2013-06-17T08:51:56.153 回答
4

其他人都说过,加上这个:分开的原因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
于 2013-06-17T08:56:10.210 回答
1

方法其实是有的。它只是被称为isInfinity而不是isInf.

请参阅第 36 行的 scaladocs RichDoublehttps ://github.com/scala/scala/blob/v2.10.2/src/library/scala/runtime/RichDouble.scala#L36

于 2013-06-17T08:51:56.350 回答