2013-06-17 1 views
11

Scala имеет Double.isNaN для обнаружения не-номера, но не Double.isInf для обнаружения (положительного или отрицательного) бесконечности.Как определить значения бесконечности в Scala?

Почему? Я хотел бы проверить, является ли параметр «реальным» числом (т. Е. Имеет числовое значение). Преобразование его в строку и проверка на «inf» или что-то сделают это, но должен быть лучший способ?

Как и в C++: http://en.cppreference.com/w/cpp/numeric/math/isinf

Использование Scala 2.10

ответ

19

в 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 
+0

Спасибо. Не знаю, как я это пропустил. – akauppi

+1

@akauppi Возможно, потому что REPL не автозаполняет его. Я вижу, что затмение предложит это. –

+0

@ som-snytt oh, хорошая точка. IDEA показывает их. (Я думаю, что плагин Netbeans тоже) – gourlaysama

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 
+0

Спасибо. То, что я считаю немного запутанным, заключается в том, что Double.PositiveInfinity использует (слишком) длинную формулировку, тогда как Double.isPosInfinity использует более короткую. – akauppi

 Смежные вопросы

  • Нет связанных вопросов^_^