如何将里程转换为km,反之亦然?

时间:2013-11-13 00:48:50

标签: ruby

我无法弄清楚如何创建这种转换,无论数学如何随着我的大脑发出嘎嘎声,都会产生一些关于数学的问题。

我的班级

class Distance

def convert(miles_to_km, km_to_miles)
    miles_to_km = 1 * 1.60934
    km_to_miles = 1 * 0.621371

end

end

或应该是这样的     班级

def convert(value, unit)
     some data i have yet to understand
end
end

我添加的输入

puts "______________Adding: _____________"

d1 = Distance.new(1, "m")
d2 = Distance.new(1, "k")

puts d1 + d2

d1 = Distance.new(2, "M")
d2 = Distance.new(2, "m")

d3 = d1 + d2
puts d3
puts d3.value
puts d3.unit

d1 = Distance.new(3, "k")
d2 = Distance.new(3, "K")

puts d1 + d2

d1 = Distance.new(4, "k")
d2 = Distance.new(4, "m")

puts d1 + d2

puts "-" * 30 ############

结果应该是

______________Adding _____________
1.621371 Miles
4 Miles
4
m
6 Kilometers
10.43736 Kilometers

2 个答案:

答案 0 :(得分:2)

您的方法需要特定于您的行为。

def convert(miles_to_km, km_to_miles)
  miles_to_km = 1 * 1.60934
  km_to_miles = 1 * 0.621371
end

应该是

def convert_miles_to_km(km)
  return km * 1.60934
end

反之亦然

答案 1 :(得分:1)

解析灵活性的字符串参数

有很多方法可以解决这个问题。很大程度上取决于您希望来自调用者的输入类型,以及您希望作为返回值传回的结果类型。

有时对于表达计量单位的方式不那么严格,同时仍然严格执行转换的方式是有用的。下面是一个示例,其中单个方法将字符串作为输入,并为预定义单位(如公里或英里)返回适当的浮点值,同时保持关于方式表达距离单位的灵活性。 / p>

# Use constants for your conversion ratios.
MI_TO_KM = 1.60934
KM_TO_MI = 0.621371

# Make your method more flexible by accepting a string
# containing both a distance and a unit identifier.
def convert_distance str
    dist, unit = str.scan(/([\d.]+)\s*(\S+)/).flatten
    case unit
    when /^k/i
      dist.to_f * KM_TO_MI
    when /^m/i
      dist.to_f * MI_TO_KM
    else
      raise ArgumentError, "unknown unit: #{unit.inspect}"
    end
end

这将为您提供以下示例输出:

convert_distance '10 miles'
#=> 16.0934

convert_distance '10 kilometers'
#=> 6.21371

convert_distance '3mi'
#=> 4.82802

convert_distance '3km'
#=> 1.8641130000000001

convert_distance '1 cubit'
#=> ArgumentError: unknown unit: "cubit"

这种方法不一定是完成工作的最简单方法,但它肯定会阻止您为“km”,“km”,“klicks”等定义不同的方法。只需在case语句中添加一个具有适当转换率的新子句,它也可以轻松扩展到其他距离单位(例如“码”)。

相关问题