Módulo:Densidad
A continuación se muestra la documentación transcluida desde la subpágina /doc. [salta a la caja de código]
Uso
Este módulo consta de una única función de llamada externa, densidad
que vale para calcular la densidad a partir de dos parámetros: <población>
y <superficie>
o a partir de la Plantilla:Población y la superficie.
{{#Invoke:Densidad|densidad|<población>|<superficie>}}
En caso de que el módulo detecte que el primer parámetro empieza por una letra trata a los parámetros de forma diferente y los dos primeros los trata como pambiénarámetros de la plantilla: {{Población}}
(<cod ISO país>
y <cod entidad>
) y el tercero como <superficie>
.
{{#Invoke:Densidad|densidad|<cod iso país>|<cod entidad>|<superficie>}}
Para los valores de la población y la superficie no admite separador de millares pero para separar la parte decimal de la entera se admite tanto punto como coma.
Por favor, añade las categorías en la subpágina de documentación y los interwikis en Wikidata. Subpáginas de este módulo.
--[[**************************************************************************************************************
*
* 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">Formato no válido</strong>'
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