【发布时间】:2019-05-21 03:23:50
【问题描述】:
我正在为班级制作一个抵押贷款计算器。我有一种方法可以确定该值是否为浮点数、同上有效数字、同上整数。如果号码是有效号码
我尝试过使用if valid_number?(apr) && float?(apr),它对整数返回true。
def valid_number?(input)
integer?(input) || float?(input)
end
def integer?(input)
/^\d+$/.match(input)
end
def float?(input)
/\d/.match(input) && /^\d*\.?\d*$/.match(input)
end
apr = gets.chomp
if valid_number?(apr)
if float?(apr)
puts "Is #{apr}% correct? Y or n"
end
end
我希望任何不包含小数的浮点数都为假?方法,但如果我不输入小数,我的程序似乎并不关心。
【问题讨论】:
-
你很少想在 Ruby 正则表达式中使用
^和$(line 的开始/结束),你几乎总是需要\A和\z( string) 的开头/结尾。看看Kernel#Float和Kernel#Integer方法。 -
我假设你不会遇到
float?(1.2e3)。我理解为什么您可能想要确认某些值是整数(例如,偿还贷款的期限数),但我不明白为什么您需要确定某个值是否为浮点数。例如,如果输入的是贷款金额,只需将其转换为浮点数,而不关心它是作为浮点数还是整数输入。由于舍入误差,使用浮点数进行财务计算通常不是一个好主意。这就是为什么我们有BigDecimal。
标签: regex ruby string regex-group