2011-12-23 16 views

cevap

63

birkaç yolu vardır:

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

Bu * değişken * bir sayı olup olmadığını kontrol etmez, * bir sayıdır nesne değişken * noktaları kontrol eder. İkisi arasında büyük bir fark var. –

+26

SO (ve başka yerlerde) ile ilgili soruların nasıl sorulduğu sorulduğunda, özellikle de kabul ettiği için OP'nin ne anlama geldiğini varsaymak doğru olur. –

10
var.is_a? String 

var.is_a? Numeric 
+4

Bu, * değişkeninin * bir sayı olup olmadığını kontrol etmez, * değişkeninin * bir sayı olup olmadığını kontrol eder. İkisi arasında büyük bir fark var. –

+15

@ Jörg: Bence OP'nin ne istediği oldukça açık, bu durumda akılcı olmaya gerek yok. –

1

onun sınıfını yazdır, bu değişkenin türü (örn Dize veya Numarası) olan gösterecektir.

ör .:

puts varName.class 
+1

Bu, * değişkeninin * bir sayı olup olmadığını kontrol etmez, * değişkeninin * bir sayı olup olmadığını kontrol eder. İkisi arasında büyük bir fark var. –

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

Bu benim için çalıştı nerede .is_a? Sayısal değil. Bir CSV dosyasından çıkarılan bir alanın bir sayı olup olmadığını kontrol ettim, bu nedenle "Sayısal" ile karşılaştırılamıyor çünkü aslında bir sayı olduğu da bir dizedir. –

+1

Bu, "15.10", "015" veya "15.33333333333333333" gibi birkaç durumda başarısız olur. –

+0

is_number için aşağıdaki tanım? Andrew'in endişelerini yayar: def is_number? (metin) !! (/^[- +]? [0-9] * \.? [0-9] + ([eE] [- +]? [0-9 ] +)? $/= ~ text) end –

3

finishing_moves gem bu çok görevi yerine getirmek için bir String#numeric? yöntemi de içerir. Yaklaşım, sadece paketlenmiş olan installero'nun cevabı ile aynıdır.

"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

Ya chr '' 0 '' ise? –

+0

Lütfen cevabınıza açıklamaları ekleyin. –

İlgili konular