Módulu:Densidá
Apariencia
La documentación pa esti módulu pue crease en Módulu:Densidá/usu
--[[**************************************************************************************************************
*
* Nombre: Módulo:Densidad
*
* Descripción: Este módulo calcula la densidad de población dividiendo la población y
* la superficie o el valor que asigne la Plantilla:Población (dependiento del parámetro 1)
* y la superficie.
* Tiene funciones adicionales que depuran el número tomando de igual forma la coma y el punto
* como separador decimal.
*
************************************************************************************************************]]
local p = {}
local marco
function formatnum(numero)
--Función auxiliar para dar a los numeros el formato con separador de millares y decimales de acuerdo al manual de estilos
local fn = {}
if numero then
if type(num(numero)) == 'number' then
fn = mw.language.new('es'):formatNum(num(numero))
return fn
else
return ''
end
end
end
function num(numero)
--Función auxiliar para depurar los números. Elimina caracteres no numéricos y covierte el string en número.
local depurar = string.gsub(string.gsub(numero,',','.'),' ','') --Transforma el separador decimal si es coma en punto y elimina .
local num = tonumber(depurar)
return num
end
function dividir(dividendo,divisor)
-- Función auxiliar para dividir valores en la tabla principal sin que de error si uno o los dos valores son nulos
local cociente = {}
local resultado = {}
if dividendo and divisor then
if type(num(dividendo)) == 'number' and type(num(divisor)) == 'number' then
cociente = num(dividendo) / num(divisor)
resultado = formatnum(math.floor((cociente * 100) + 0.5) / 100)
return resultado
else
return '<strong class="error">Formatu non válidu</strong>[[Categoría:Páxines con errores matemáticos]]'
end
end
end
function poblacion(pais,municipio)
--Función auxiliar que aplica la plantilla:Población
local dato = marco:expandTemplate{
title = 'Población',
args = {
pais, municipio, formato = 'no'
}
}
return dato
end
function p.densidad(frame)
marco = frame
local Pais = {}
local Municipio = {}
local Superficie = {}
local Poblacion = {}
local s = frame.args[1]
if mw.ustring.find(s, '%a') then -- Con esto detecta si el 1 er parametro es un cod ISO de país o el valor de la población
--Si detecta que es una letra aplica la plantilla población y los toma como: 1 cod ISO país, 2 cod entidad y 3 superficie.
Pais = frame.args[1]
Municipio = frame.args[2]
Superficie = frame.args[3]
Poblacion = poblacion(Pais,Municipio)
else
--De lo contrario lee los dos parámetros como 1 población y 2 superficie
Superficie = frame.args[2]
Poblacion = frame.args[1]
end
local Densidad = dividir(Poblacion,Superficie)--Calculamos la densidad
return Densidad
end
return p