source

변수가 정수인지 확인하는 중

ittop 2023. 6. 1. 22:54
반응형

변수가 정수인지 확인하는 중

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

반응형