Как определить значения Бесконечности в Scala?
Scala имеет Double.isNaN
для обнаружения не-число, но не Double.isInf
для выявления (положительной или отрицательной) бесконечности.
почему? Я хотел бы проверить, является ли параметр "реальным" числом (т. е. имеет числовое значение). Преобразование его в строку и проверка на "inf" или что-то сделает это, но должен быть лучший способ?
как в C++: http://en.cppreference.com/w/cpp/numeric/math/isinf
В Scala 2.10
3 ответов
Скала 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
какой-то плюс: повод для отдельной 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
.
см. scaladocs для RichDouble
строка 36: https://github.com/scala/scala/blob/v2.10.2/src/library/scala/runtime/RichDouble.scala#L36