2011-12-23 4 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에 대한 다음 정의는 무엇입니까? 앤드류 (Andrew)의 염려를 덜어 준다. 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

답변에 설명을 추가하십시오. –

관련 문제