Hi, i am a start developer in ruby, i need to do a make a duble validation in my project

My code is this:

  • I left de validation part bold, i want the num1 and num2 Integer ou float, but i not write .to_i our .to_f in gets.chomp because i will broak the validation string, i tested write != String in local the Integer our Float, but not resolve the problem, anyone can help me ?

loop do
puts ‘Bem vindo à sua própria calculadora’
puts ‘1 - Usar a calculadora’
puts ‘0 - Sair’
print 'Escolha uma opção: ’
opcao = gets.chomp.to_i
if opcao == 1
puts ‘Fico feliz que você decidiu usar a calculadora’

    print 'Digite o primeiro número: '
    num1 = gets.chomp
    print 'Digite o segundo número: '
    num2 = gets.chomp
    
    **if  num1.class and num2.class == Integer or Float**
        puts 'Qual das operações matemáticas você quer fazer ?'
        puts '1 - Soma'
        puts '2 - Subração'
        puts '3 - Multiplicação'
        puts '4 - Divisão'
        print 'Escolha uma opção: '
        opcaooperacao = gets.chomp.to_i
        case opcaooperacao
        when 1
            soma = num1 + num2
            puts "Como você escolheu a opção de soma, o número #{num1} + #{num2} da #{soma}"
        when 2
            subtracao = num1 - num2
            puts "Como você escolheu a opção de subtração, o número #{num1} - #{num2} da #{subtracao}"
        when 3
            multiplicao = num1 * num2
            puts "Como você escolheu a opção de multiplicação, o número #{num1} multiplicado pelo número #{num2} da #{multiplicao}"
        when 4
            divisao = num1 / num2
            puts "Como você escolheu a opção de divisão, o número #{num1} dividido pelo número #{num2} da #{divisao}"
        else 
            puts 'Opção Inválida'
        end
    else 
        puts 'Isso não é um número'
    end
elsif opcao == 0 
    puts 'Fico magoado por você não querer usar a calculaora'
    break
else
    puts 'Opção inválida'
end

end

Hey Arthur!

Sure I can help with that. In Ruby, gets.chomp always returns a string. To verify if you received an integer or a float, you can use the following Ruby pattern to attempt to convert a string to a Float or Integer:

def is_number?(num)
  true if Float(num) rescue false
end

So your validation could look like this:

if is_number?(num1) && is_number?(num2)
  num1 = num1.to_f
  num2 = num2.to_f
  # rest of the code...
end

This way, you make sure num1 and num2 are either float or integers before performing any operations on them.
Of course, you can improve this solution to perfectly suit your needs! Happy coding!

1 Like

thanks for de help Robert, but i have a questions,

Why didn’t my code work?

But, i understend what you do, created a function para saber se realmente é um número, because a integer number is a float number to, (1 == 1.0) correct ?, but i no why whats is rescue false in function