2011-12-23 36 views

Trả lời

63

Có một số cách:

>> 1.class #=> Fixnum 
>> "foo".class #=> String 
>> 1.is_a? NumeriC#=> true 
>> "foo".is_a? String #=> true 
+7

này không kiểm tra xem * biến * là một con số, nó sẽ kiểm tra xem đối tượng biến * điểm * là một số. Có một sự khác biệt rất lớn giữa hai người. –

+26

Khi đặt câu hỏi về SO (và các nơi khác) được yêu cầu một cách thông tục, thật công bằng khi cho rằng đó là ý nghĩa của OP, đặc biệt là kể từ khi người đó chấp nhận nó. –

10
var.is_a? String 

var.is_a? Numeric 
+4

Điều này không kiểm tra xem biến * có phải là một số hay không, nó sẽ kiểm tra xem đối tượng biến * trỏ tới * có phải là một số hay không. Có một sự khác biệt rất lớn giữa hai người. –

+15

@ Jörg: Tôi nghĩ rằng điều đó là khá rõ ràng những gì OP đang yêu cầu, không cần phải cho người đi bộ trong trường hợp này. –

1

In lớp của nó, nó sẽ cho bạn thấy những loại biến là (ví dụ String hoặc Number).

ví dụ .:

puts varName.class 
+1

Điều này không kiểm tra xem * biến * là một số, nó sẽ kiểm tra xem đối tượng biến * trỏ tới * có phải là một số hay không. Có một sự khác biệt rất lớn giữa hai người. –

21
class Object 
    def is_number? 
    self.to_f.to_s == self.to_s || self.to_i.to_s == self.to_s 
    end 
end 

> 15.is_number? 
=> true 
> 15.0.is_number? 
=> true 
> '15'.is_number? 
=> true 
> '15.0'.is_number? 
=> true 
> 'String'.is_number? 
=> false 
+0

Điều này làm việc cho tôi ở đâu '.is_a? Số' không. Tôi đã kiểm tra xem một trường được trích xuất từ ​​tệp CSV có phải là một con số hay không, do đó so sánh với 'Numeric' không thành công vì nó thực sự là một chuỗi cũng xảy ra là một số. –

+1

Điều này không thành công trong một vài trường hợp, như '15.10',' 015' hoặc '15.33333333333333333'. –

+0

Định nghĩa sau cho số isố? satsifies Andrew's mối quan tâm: def is_number? (văn bản) !! (/^[- +]? [0-9] * \.? [0-9] + ([eE] [- +]? [0-9 ] +)? $/= ~ văn bản) kết thúc –

3

Các finishing_moves gem bao gồm một phương pháp String#numeric? để hoàn thành nhiệm vụ này rất. Cách tiếp cận này giống như câu trả lời của installero, chỉ đóng gói.

"1.2".numeric? 
#=> true 

"1.2e34".numeric? 
#=> true 

"1.2.3".numeric? 
#=> false 

"a".numeric? 
#=> false 
-1
if chr.to_i != 0 
    puts "It is number, yep" 
end 
+0

Nếu 'chr' là' "0" 'thì sao? –

+0

Vui lòng thêm giải thích cho câu trả lời của bạn. –

Các vấn đề liên quan