Modul:Dec till frac
Utseende
Dokumentation [visa] [redigera] [historik] [rensa sidcachen]
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.."<sup> "..taljare.."</sup>⁄<sub>"..namnare.."</sub>"
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