如何在Scala中检测Infinity值?

时间:2013-06-17 08:44:10

标签: scala scala-2.10

Scala有Double.isNaN用于检测非数字但没有Double.isInf用于检测(正或负)无穷大。

为什么呢?我想检查一个参数是否是真实的"数字(即具有数值)。将其转换为字符串并检查" inf"或某事会做到,但必须有更好的方法吗?

与C ++类似:http://en.cppreference.com/w/cpp/numeric/math/isinf

使用Scala 2.10

3 个答案:

答案 0 :(得分:20)

Scala的DoubleisInfinite方法和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

答案 1 :(得分: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

答案 2 :(得分:1)

方法实际上就在那里。它只是调用isInfinity而不是isInf

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