Showing revision 1
This code provides a convert_to function that converts between any two units on a scale defined in a table in pairs of {name, equivalent number of previous unit}. The example given is time, but it can be adapted for Imperial units, military divisions, pre-decimalisation British pounds, or any other incremental system of measurement.
intervals={
{"seconds",1},
{"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"))
RecentChanges · preferences
edit · history · current revision
Edited June 26, 2010 4:35 pm GMT (diff)