2009-04-30 7 views

Trả lời

2

0.0/0.0 hoạt động với tôi trên ruby ​​1.8.6.

Các chủ đề liên quan đến bằng cách Pesto có chức năng này, mà nên làm việc trên nền tảng nơi số dấu chấm động được thực hiện theo chuẩn 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

cung cấp cho ZeroDivisionE rror: chia cho 0 –

+0

Bạn đang sử dụng phiên bản Ruby nào? –

+1

Lưu ý: 0/0 cho ZeroDivisionError, nhưng 0.0/0.0 thì không. – Kudu

17

Cách đơn giản nhất là sử dụng 0.0/0.0. "NaN" .to_f không hoạt động và có một số thảo luận in this thread về lý do.

+4

'0/0.0' cũng hoạt động .. (PS. ĐÂY LÀ L INSI!) –

30

Nếu bạn cần phải kiểm tra xem một số là NaN, bạn có thể sử dụng #nan? vào nó:

ruby-1.8.7-p352 :008 > (0/0.0).nan? #=> true 
ruby-1.8.7-p352 :009 > (0/1.0).nan? #=> false 
45

Kể từ của Ruby 1.9.3 có một constant để lấy giá trị NaN

Float::NAN 
=> NaN 
+0

Hằng số đó thực sự có sẵn kể từ [1.9.2] (https://github.com/ruby/ruby/blob/trunk/doc/NEWS -1.9.2 # L87). – cremno

+1

Điều này mang tính biểu cảm hơn câu trả lời được chấp nhận. –

0

Việc gán một biến trong Rails có thể được thực hiện như vậy (hữu ích cho việc kiểm tra đơn vị):

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