Module:Année-lumière

 Documentation[créer] [purger]
local p = {}

-- Conversion d'années-lumière en parsecs
function p.convertir_en_pc(distance_en_al)
    return distance_en_al * 0.306601 -- 1 AL ≈ 0.306601 pc
end

-- Fonction principale pour formater la distance
function p.formater(distance, unite, prefixe, marge)
    -- S'assurer que distance est un nombre
    local distance_en_al = tonumber(distance)
    if not distance_en_al then return "Distance invalide" end

    local distance_en_pc = p.convertir_en_pc(distance_en_al)

    -- Calcul des multiples
    local kpc = distance_en_pc / 1000
    local mpc = distance_en_pc / 1000000
    local gpc = distance_en_pc / 1000000000

    -- Ajout du préfixe
    local prefixe_str = prefixe and " ≃ " or ""
    
    -- Marges
    local marge_str = marge and string.format(" ± %.2f", marge) or ""

    -- Formatage des résultats selon l'unité
    if unite == "kal" then
        local kal = distance_en_al / 1000
        return string.format("%.2f K[[Année-lumière|al]]%s%s(%.2f k[[Parsec|pc]])", kal, prefixe_str, marge_str, p.convertir_en_pc(kal * 1000) / 1000)
    elseif unite == "mal" then
        local mal = distance_en_al / 1000000
        return string.format("%.2f %sM[[Année-lumière|al]]%s(%.2f M[[Parsec|pc]])", prefixe_str .. mal, marge_str, p.convertir_en_pc(mal * 1000000) / 1000000)
    elseif unite == "gal" then
        local gal = distance_en_al / 1000000000
        return string.format("%.2f %sG[[Année-lumière|al]]%s(%.2f G[[Parsec|pc]])", prefixe_str .. gal, marge_str, p.convertir_en_pc(gal * 1000000000) / 1000000000)
    else
        return string.format("%.2f %sal%s(%.2f [[Parsec|pc]], %.2f k[[Parsec|pc]], %.2f M[[Parsec|pc]], %.2f G[[Parsec|pc]])", 
            distance_en_al, prefixe_str, marge_str, distance_en_pc, kpc, mpc, gpc)
    end
end

return p