Как мне объявить NaN (не число) в Ruby? - PullRequest
39 голосов
/ 30 апреля 2009

Также "NaN" .to_f возвращает 0 вместо NaN.

Ответы [ 5 ]

48 голосов
/ 25 сентября 2013

Начиная с Ruby 1.9.3, существует константа для получения значения NaN

Float::NAN
=> NaN
30 голосов
/ 04 января 2012

Если вам нужно проверить, является ли число NaN, вы можете использовать #nan? на нем:

ruby-1.8.7-p352 :008 > (0/0.0).nan? #=> true 
ruby-1.8.7-p352 :009 > (0/1.0).nan? #=> false 
17 голосов
/ 30 апреля 2009

Самый простой способ - использовать 0.0 / 0.0. «NaN» .to_f не работает, и в этой теме обсуждается о том, почему.

2 голосов
/ 30 апреля 2009

0.0 / 0.0 у меня работает на ruby ​​1.8.6.

Поток, связанный с Pesto, имеет эту функцию, которая должна работать на платформах, где числа с плавающей запятой реализованы в соответствии с IEEE 754:

def aNaN
    s, e, m = rand(2), 2047, rand(2**52-1)+1
    [sprintf("%1b%011b%052b", s,e,m)].pack("B*").unpack("G").first
end
0 голосов
/ 01 августа 2014

Назначение переменной в Rails может быть сделано таким образом (полезно для модульного тестирования):

o.amount = BigDecimal.new('NaN')
expect(o.valid?).to be false
...