Ruby: Проверить, что данный ввод положительный или отрицательный. - PullRequest
0 голосов
/ 14 июля 2020

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

def isInt(num)
    return Integer(num) rescue nil
end

def isFloat(num)
    return Float(num) rescue nil
end 

puts "Enter bill amount"

billAmount = gets.chomp
billAmount = isInt(billAmount) || isFloat(billAmount)
    
  if !billAmount and !billAmount.to_i.positive?()
    puts "Error!! Please enter a valid bill amount."
    next # similar to continue
  end 

Я пытаюсь выяснить, вводит ли пользователь положительное или отрицательное число. Я пробовал с billAmount.positive?(), billAmount.to_i.positive?() и if billAmount > 0.

У меня ничего не работает. Любые предложения приветствуются.

Спасибо.

1 Ответ

2 голосов
/ 14 июля 2020

Ваш условный оператор содержит две проверки, которые не могут обе быть истинными:

 if !billAmount and !billAmount.to_i.positive?()

In ruby ! означает обратное, т.е. true возвращает true, а !true возвращает false.

Ваша первая часть условного выражения гласит: «Если сумма счета не равна нулю» или, проще говоря, «имеет ли значение billAmount nil?», Что, если оно не равно нулю, возвращает false

Вторая часть спрашивает, верно ли !billAmount.to_i.positive?(). Это то же самое, что писать true.to_i.positive? или false.to_i.positive?

Я полагаю, вам нужно что-то вроде:

unless billAmount&.to_i&.positive

Это предложение вернет истину только в том случае, если сумма счета вернет ноль , или после преобразования в целое число, возвращает неположительное число.

Синтаксис & предотвращает выдачу ruby ошибки, если первая часть равна нулю (т.е. неопределенный метод to_i для nilclass) , вместо этого просто возвращается nil (что оценивается как false)

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