Как проверить, является ли переменная Integer или Float - PullRequest
0 голосов
/ 02 сентября 2018

Я хочу проверить, является ли моя переменная целочисленной или с плавающей точкой. Это для калькулятора. Я не хочу, чтобы это продолжалось бесконечно.

Как бы я это сделал? Я пытался сделать следующее:

puts "Enter a number: "
num1 = gets.chomp()
while !(num1 == Integer.superclass or num1 == Float.superclass)
  puts "Enter an actual number: "
  num1 = gets.chomp()
end

Ответы [ 3 ]

0 голосов
/ 02 сентября 2018

Если вы хотите проверить, является ли переменная определенного типа, вы можете просто использовать kind_of?:

1.kind_of? Integer #true


(1.5).kind_of? Float #true
0 голосов
/ 02 сентября 2018

Поскольку входные данные являются строкой, вам необходимо сначала преобразовать их в целое число или число с плавающей запятой

Так что, если вы сделаете следующее и введете «привет», он вернет 0.0

num1 = gets.chomp.to_f

Если вы хотите строго проверить, является ли оно целым числом, то вы можете сделать это с помощью

input = gets.chomp
until input.is_a?(Fixnum) do
 print "Please enter a number: "
 input = Integer(gets.chomp) rescue nil
end
0 голосов
/ 02 сентября 2018

В общем, один вариант:

10.class == Integer # => true
10.5.class == Float # => true

Или другое:

10.is_a? Integer # => true
10.5.is_a? Float # => true

Но так как ввод является строкой, это может быть возможным решением для проверки, является ли строка целым числом или числом с плавающей запятой, обезьяна исправляет класс String:

module StringFloatOrInteger
  def integer_or_float?
   begin !!Float(self) rescue false end
  end

  def integer_not_float?
    begin !!Integer(self) rescue false end  
  end

  def integer?
    integer_not_float? & integer_or_float?
  end

  def float?
    !integer_not_float? & integer_or_float?
  end
end

String.include StringFloatOrInteger

"home".integer? # => false
"home".float? # => false
"10".integer? # => true
"10".float? # => false
"10.5".integer? # => false
"10.5".float? # => true

В вашем случае вы можете использовать вот так, запрашивая n раз для ввода

def get_integer
  2.times do # or whatever times
    puts "Please enter an integer: "
    input = gets.chomp
    return input.to_i if input.integer?
  end
  return nil # or whatever
end

number = get_integer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...