Ngoài ra "NaN" .to_f trả về 0 thay vì NaN.Làm cách nào để khai báo NaN (không phải là số) trong Ruby?
37
A
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
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
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
cung cấp cho ZeroDivisionE rror: chia cho 0 –
Bạn đang sử dụng phiên bản Ruby nào? –
Lưu ý: 0/0 cho ZeroDivisionError, nhưng 0.0/0.0 thì không. – Kudu