Scala有Double.isNaN
用于检测非数字但没有Double.isInf
用于检测(正或负)无穷大。
为什么呢?我想检查一个参数是否是真实的"数字(即具有数值)。将其转换为字符串并检查" inf"或某事会做到,但必须有更好的方法吗?
与C ++类似:http://en.cppreference.com/w/cpp/numeric/math/isinf
使用Scala 2.10
答案 0 :(得分:20)
Scala的Double
有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
答案 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