2011-12-23 11 views

答えて

63

いくつかの方法があります。

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

これは*変数*は番号であるかどうかをチェックしません、それはオブジェクト変数*ポイントに*は数値であるかどうかをチェックします。両者には巨大な違いがあります。 –

+26

SO(および他の場所)に関する質問がどのように口頭で求められるかを考えると、OPが何を意味しているのか、特に彼または彼女がそれを受け入れたからといって、 –

10
var.is_a? String 

var.is_a? Numeric 
+4

これは*変数*が数値かどうかをチェックせず、変数*が指し示すオブジェクトが数値かどうかをチェックします。両者には巨大な違いがあります。 –

+15

@Jörg:私は、OPが何を求めているのかははっきりと分かっていると思います。この場合、大括弧は必要ありません。 –

1

は、そのクラスを印刷、それが(例えば、文字列または数値)である変数のタイプを紹介します。

例えば:

puts varName.class 
+1

これは、変数*が数値かどうかをチェックしません。変数*が指すオブジェクトが数値かどうかをチェックします。両者には巨大な違いがあります。 –

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

これは私のために働いた '.is_a?数値ではありませんでした。私は、CSVファイルから抽出されたフィールドが数字かどうかを調べていました。したがって、実際に数値である文字列であるため、Numericとの比較は失敗します。 –

+1

これは、 '15.10'、' 015'や '15.33333333333333333'のように、いくつかのケースで失敗します。 –

+0

次のis_numberの定義はありますか?アンドリューの懸念を和らげる: def is_number?(テキスト) !!(/^[ - +]?[0-9] * \。?[0-9] + [[eE] [ - +]?[0-9 ] +)?$/=〜text) end –

3

finishing_moves gemこの非常にタスクを達成するString#numeric?方法を含みます。このアプローチは、パッケージ化されたinstalleroの答えと同じです。

"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

'chr'が' '0 ''の場合はどうなりますか? –

+0

あなたの答えに説明を加えてください。 –

関連する問題