Modul:Dec till frac
Från Järnvägsdata
local p = {}
function p.dec_till_frac(frame) -- Funktion: Översätter decimaltal till bråk i blandad form -- Parametrar: -- decimaltal - Talet som ska översättas, kan vara positivt eller negativt -- noggrannhet - Anger en övre gräns för nämnaren i bråket. Bråket avkortas om möjligt -- Resultat: Teckensträng, t ex 2 3/4, med täljare upphöjd och nämnare nedsänkt
local decimaltal = frame.args.decimaltal+0 local noggrannhet = frame.args.noggrannhet+0 local absoluttal = math.abs(decimaltal) local decimaldel = absoluttal - math.floor(absoluttal) local tecken = "" if decimaltal < 0 and math.floor(absoluttal) ~= 0 then tecken = "-"; end if round(decimaldel * noggrannhet) == 0 then return tecken..math.floor(absoluttal); end if round(decimaldel * noggrannhet) == noggrannhet then return tecken..(math.floor(absoluttal) + 1); end if decimaltal < 0 then tecken = "-"; end
local delare = sgd(noggrannhet, round(decimaldel * noggrannhet)) local namnare = noggrannhet local taljare = round(decimaldel * namnare) if delare > 0 then namnare = namnare / delare; taljare = taljare / delare; end local heltalsdel = "" if math.floor(absoluttal) > 0 then heltalsdel = ""..math.floor(absoluttal); end return tecken..heltalsdel.." "..taljare.."⁄"..namnare..""
end
function round (x) -- Funktion: Avrundar parametern till närmaste heltal
if x >= 0 then return math.floor (x + 0.5) else return math.ceil (x - 0.5) end
end
function sgd(a,b) -- a ska vara större eller lika med b -- Funktion: Beräknar största gemensamma delare till de två parametrarna while b > 0 do c = a % b; a = b ; b = c; end
return a
end
return p
