2011-12-23 15 views

risposta

63

Ci sono diversi modi:

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

Questo non controlla se la variabile * * è un numero, esso verifica se l'oggetto punti * a * variabile è un numero. C'è una grossa differenza tra le due. –

+26

Dato che le domande su SO (e altrove) sono richieste in modo colloquiale, è giusto presumere che sia ciò che intendeva OP, specialmente da quando l'ha accettata. –

10
var.is_a? String 

var.is_a? Numeric 
+4

Questo non controlla se la * variabile * è un numero, controlla se l'oggetto che la variabile * punta su * è un numero. C'è una grossa differenza tra le due. –

+15

@ Jörg: Penso che sia abbastanza ovvio ciò che l'OP sta chiedendo, in questo caso non c'è bisogno di pedanteria. –

1

Stampa sua classe, che vi mostrerà quale tipo di variabile è (ad esempio String o Number).

es .:

puts varName.class 
+1

Questo non controlla se la * variabile * è un numero, controlla se l'oggetto che la variabile * punta su * è un numero. C'è una grossa differenza tra le due. –

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

Questo ha funzionato per me dove '.is_a? Numeric' no. Stavo controllando se un campo estratto da un file CSV fosse un numero, quindi il confronto con 'Numeric' fallisce perché in realtà è una stringa che è anche un numero. –

+1

Questo fallisce in alcuni casi, come '15.10',' 015' o '15.33333333333333333'. –

+0

La seguente definizione per is_number? satsifies preoccupazioni di Andrew: def is_number? (testo) !! (/^[- +]? [0-9] * \.? [0-9] + ([eE] [- +]? [0-9 ] +)? $/= ~ testo) fine –

3

Il finishing_moves gem include un metodo String#numeric? per realizzare questo compito molto. L'approccio è lo stesso della risposta di installero, solo impacchettato.

"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

Cosa succede se 'chr' è' "0" '? –

+0

Aggiungi le spiegazioni alla tua risposta. –

Problemi correlati