單位轉換

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 (diff)