单位转换

lua-users home
wiki

这段代码提供了一个convert_to函数,用于在表格中定义的两个单位之间进行转换,表格中以 {名称,前一个单位的等效数量} 的形式成对出现。给出的示例是时间,但它可以适用于英制单位、军事单位、十进制化前的英镑或任何其他增量测量系统。

intervals={
  {"seconds",1}, --the "1" should never really get used but
  {"minutes",60},
  {"hours",60},
  {"days",24},
}

positions={}
for i=1,4 do
  positions[intervals[i][1]]=i
end

function convert_to(value, sourceunits, targetunits)

  local sourcei, targeti = positions[sourceunits], positions[targetunits]
  assert(sourcei and targeti)

  if sourcei<targeti then

    local base=1
    for i=sourcei+1,targeti do
      base=base*intervals[i][2]
    end

    return value/base

  elseif sourcei>targeti then

    local base=1
    for i=targeti+1,sourcei do
      base=base*intervals[i][2]
    end

    return value*base

  else return value end
end

print(convert_to(86400,"seconds","days"))
print(convert_to(1,"days","seconds"))

最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2010 年 6 月 29 日凌晨 2:14 GMT (差异)