简单if if语句单位转换cm和in

时间:2013-09-08 23:21:44

标签: ruby unit-testing if-statement

出于某种原因,无论我输入“cm”还是“in”,此代码总是将b(2.54)乘以unit_number

puts "Welcome to my unit conversion calculator. This calculator can convert
between Centimeters and Inches. If you could like to convert Centimeters to Inches, write: in. If you would like to convert Inches to centimeters, write: cm."

unit = gets.to_s

puts " how many of your unit would you like to convert"
unit_number = gets.to_f

a = 0.39370079
b = 2.54

if unit == 'in'      
  puts "your conversion is: #{ (unit_number * a)}"    
else unit == 'cm'
  puts "your conversion is: #{ (unit_number * b)}"
end

3 个答案:

答案 0 :(得分:3)

gets将捕获包含尾随新行(输入)的标准输入,因此unit不会是'cm',而是"cm\n"。您需要使用"\n"

删除尾随的chomp
unit = gets.chomp

您不需要将to_s调用gets的返回值,因为它已经是Stringelse语句应为{{} 1}}或elsif unit == 'cm'

答案 1 :(得分:1)

当您实际需要的是 else 语句时,您的条件会调用elsif语句:

elsif unit == 'cm'

基本上,您目前所处的情况是您的第一个条件(即if unit == 'in')未得到满足(请参阅Pablo B's answer了解原因)。但是,第二个条件,因为它是else语句。由于第一个条件始终为false,因此else条件始终为真。

如果您调用elsif语句,条件将首先检查unit == 'in';如果不是,则检查是否unit == 'cm'。如果两者都不为真,则条件将返回nil

答案 2 :(得分:0)

我确切地知道你的感受。调试很痛苦。 @akhanubis已经指出了处理#chomp返回值所需的gets方法。虽然我假设您编写了用于说明目的的代码,但如果您需要convert physical units for real,则只需安装 sy gem。在gem install sy之后,您可以:

require 'sy/imperial'

7.5.inch.in :cm
#=> 19.05
42.cm.in :inch
#=> 16.5354