변수가 정수인지 확인하는 중
Rails 3 또는 Ruby에는 변수가 정수인지 확인할 수 있는 내장 방식이 있습니까?
예를들면,
1.is_an_int #=> true
"dadadad@asdasd.net".is_an_int #=> false?
사용할 수 있습니다.is_a?
방법
>> 1.is_a? Integer
=> true
>> "dadadad@asdasd.net".is_a? Integer
=> false
>> nil.is_a? Integer
=> false
객체가 객체인지 여부를 알고 싶은 경우Integer
또는 의미 있게 정수로 변환될 수 있는 것(다음과 같은 것은 포함하지 않음)"hello"
,어떤.to_i
로 변환됩니다.0
):
result = Integer(obj) rescue false
문자열에 정규식 사용:
def is_numeric?(obj)
obj.to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/) == nil ? false : true
end
변수가 특정 유형인지 확인하려면 다음을 사용합니다.kind_of?
:
1.kind_of? Integer #true
(1.5).kind_of? Float #true
is_numeric? "545" #true
is_numeric? "2aa" #false
변수 유형(숫자 문자열일 수 있음)이 확실하지 않은 경우, 매개 변수에 전달된 신용 카드 번호이므로 원래 문자열이지만 문자가 없는지 확인하려면 다음 방법을 사용합니다.
def is_number?(obj)
obj.to_s == obj.to_i.to_s
end
is_number? "123fh" # false
is_number? "12345" # true
@Benny는 이 방법의 오류를 지적합니다. 이 점을 명심하십시오.
is_number? "01" # false. oops!
있다var.is_a? Class
(당신의 경우:var.is_a? Integer
); 그것은 계산서에 맞을 수도 있습니다.아니면.Integer(var)
구문 분석할 수 없는 경우 예외를 던질 수 있습니다.
트리플 이퀄을 사용할 수 있습니다.
if Integer === 21
puts "21 is Integer"
end
더 "오리 타이핑" 방법은 다음과 같습니다.respond_to?
이러한 방식으로 "줄과 같은" 또는 "줄과 같은" 클래스도 사용될 수 있습니다.
if(s.respond_to?(:match) && s.match(".com")){
puts "It's a .com"
else
puts "It's not"
end
0 값을 변환할 필요가 없는 경우, 나는 방법을 찾습니다.to_i
그리고.to_f
문자열을 0 값(변환할 수 없거나 0인 경우) 또는 실제 값으로 변환하므로 매우 유용합니다.Integer
또는Float
가치.
"0014.56".to_i # => 14
"0014.56".to_f # => 14.56
"0.0".to_f # => 0.0
"not_an_int".to_f # 0
"not_a_float".to_f # 0.0
"0014.56".to_f ? "I'm a float" : "I'm not a float or the 0.0 float"
# => I'm a float
"not a float" ? "I'm a float" : "I'm not a float or the 0.0 float"
# => "I'm not a float or the 0.0 float"
EDIT2: 조심하세요,0
정수 값은 거짓이 아닙니다. 참입니다.!!0 #=> true
) (감사합니다 @codecoder)
편집
아, 방금 다크 케이스에 대해 알아냈어요...하지만 번호가 첫 번째 위치에 있을 때만 발생하는 것 같습니다.
"12blah".to_i => 12
Alex D의 답변을 활용하기 위해 정교함을 사용합니다.
module CoreExtensions
module Integerable
refine String do
def integer?
Integer(self)
rescue ArgumentError
false
else
true
end
end
end
end
나중에 수업에서:
require 'core_ext/string/integerable'
class MyClass
using CoreExtensions::Integerable
def method
'my_string'.integer?
end
end
저는 어떤 것이 문자열인지 또는 어떤 종류의 숫자인지를 결정하기 전에 비슷한 문제가 있었습니다.저는 정규 표현을 사용해 보았지만, 그것은 제 사용 사례에 대해 신뢰할 수 없습니다.대신 변수의 클래스를 확인하여 변수가 숫자 클래스의 하위 항목인지 확인할 수 있습니다.
if column.class < Numeric
number_to_currency(column)
else
column.html_safe
end
이 경우 숫자 하위 항목인 BigDecimal, Date:를 대체할 수도 있습니다.무한대, 정수, 고정수, 부동소수, Bignum, Rational, Complex
기본적으로, n == 3x와 같은 정수 x가 존재하는 경우, 정수 n은 3의 거듭제곱입니다.
이 기능을 사용할 수 있는지 확인하기 위해
def is_power_of_three(n)
return false unless n.positive?
n == 3**(Math.log10(n)/Math.log10(3)).to_f.round(2)
end
아마도 다음과 같은 것을 찾고 있을 것입니다.
INT로 "2.0 또는 2.0"을 사용하지만 2.1 및 "2"는 사용하지 않습니다.1"
num = 2.0
만약 num.is _a?문자열 num = float(num) 복구 거짓 끝
new_num = 정수(num) 복구 false
풋스넘
puts new_num
puts num == new_num
언급URL : https://stackoverflow.com/questions/4589968/checking-if-a-variable-is-an-integer
'source' 카테고리의 다른 글
다중 인증 사용자 계정을 위한 MongoDB 스키마 설계 (0) | 2023.06.01 |
---|---|
이진 파일과의 Git 충돌 해결 (0) | 2023.06.01 |
Ruby/Rails: 날짜를 UNIX 타임스탬프로 변환 (0) | 2023.06.01 |
장기간 실행되는 Linux 프로세스의 시작 시간을 얻는 방법은 무엇입니까? (0) | 2023.05.27 |
UIButton의 텍스트 정렬 센터를 만드는 방법은 무엇입니까?IB 사용 (0) | 2023.05.27 |