Module:Conversion
Apparence
[voir] [modifier] [historique] [purger]
Modèle de mise en forme de valeur numérique éventuellement accompagnée d'une unité de mesure.
Utilisation
Fonctions exportables vers un autre module
fonction p.displayvalue(value, sourceunit, displayformat)
met en forme une valeur numérique éventuellement accompagné d'une unité de mesure
value
doit être un nombre, ou une chaîne pouvant être convertie en nombresourceunit
doit correspondre à une valeur acceptée sur Module:Conversion/Données.- la table
displayformat
contient les paramètres suivant :
targetunit =
l'unité vers laquelle convertirshowunit
showunit = true affiche l'unité de mesure, en utilisant l'abréviation donnée dans Module:Conversion/Données.showunit = long
utilise le format long ("mètres" à la place de "m").showlink =
affiche un lien vers l'article concernant l'unité de mesure (m -> m)rounding =
nombre de chiffres après la virgule
Fonctions exportables vers un modèle
fonction p.display(frame)
: sert d'intermédiaire entre le wikicode et la fonction displayvalue. Arguments:
1 =
valeur numérique2 =
unité de mesure de la valeur d'origine3 =
unité de mesure de la valeur à retournershowunit =
mettre "true" pour afficher l'unité de mesurerounding =
nombre de chiffres après la virgule
Exemples
{{#invoke:Conversion|display|25|foot|metre}}
7,62{{#invoke:Conversion|display|25|foot|metre|rounding=0|showunit = true}}
8 m
Modules externes et autres éléments dont ce module a besoin pour fonctionner
Voir aussi
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (modifier).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
local math_mod = require( "Module:Math" )
local defaultlang = 'fr'
local p = {}
-- les unités élalon à partir par lesquelles on passe pour convertir entre deux unités
local referenceunits = {
length = 'metre',
area = 'squaremeter',
}
local units = {
-- nom de l'unité = {grandeur mesurée, valeur par rapport à l'unité de référence, abréviation, lien, libellé singulier, libellé pluriel
foot = {'length', 0.3048, ' ft', 'Q3710', 'Pied (unité)', 'pied', 'pieds'},
hectare = {'area', 10000, ' ha', 'Q35852', 'hectare', 'hectare', 'hectares'},
metre = {'length', 1, ' m', 'Q11573', 'mètre', 'mètre', 'mètres'},
kilometre = {'length', 1000, ' km', 'Q828224', 'kilomètre', 'kilomètre', 'kilomètres',},
['square meter'] = {'area', 1, ' m<sup>2</sup>', 'Q25343', ' mètre carré', 'mètre carré', 'mètres carrés'},
['square kilometer'] = {'area', 1000000, ' km<sup>2</sup>', 'Q712226', ' kilomètre carré', 'kilomètre carré', 'kilomètres carrés'}
}
function p.displayvalue(val, unit, displayformat, errhandling) -- affiche une valeur formatée)
if not val then
return nil
end
if not displayformat or type(displayformat) ~= 'table' then
displayformat = {}
end
local showunit, showlink, rounding = displayformat.showunit, displayformat.showlink, displayformat.rounding
-- valeur numérique
local numval = tonumber(val)
-- la valeur en string formatée
local valstr
if not numval then -- si on a pas réussi à faire un nombre, il y a un problème d'input, on rend ça tel quel au lecteur
valstr = val
else
if rounding then
numval = math_mod._round( numval, rounding )
end
valstr = mw.language.new(defaultlang):formatNum(numval)
end
-- formatage de l'unité, nom affiché, lien etc.
local unitstr
local link
local unitdata = units[unit]
if showunit == 'long' then -- format long montrer l'unité en entier
if (numval or 0) > 1 then
unitstr = unitdata[7]
else
unitstr = unitdata[6] end
elseif showunit then
unitstr = unitdata[3]
end
-- showlink
if type( displayformat.showlink == 'string') then --liens personnalisés
link = displayformat.showlink
elseif displayformat.showlink == true then -- liens vers l'article dédié
link = unitdata[5]
end
if unitstr and link then
unitstr = '[[' .. link .. '|' .. unitstr .. ']]'
end
if unitstr then
unitstr = ' ' .. unitstr
end
return valstr .. (unitstr or '')
end
function p._convert(value, sourceunit, targetunit, displayformat) -- convertit une valeur dans une autre unité (ou garde la même) et la formate
value = tonumber(value)
if not value then
return nil
end
if type(value) ~= 'number' then
return error("bad datatype: " .. type(value))
end
local sourceunitdata = units[sourceunit]
local targetunitdata = units[targetunit]
if not sourceunit then
return error("unknown source measurement unit: " .. (sourceunit or "none provided"))
end
if not targetunitdata then
return error("unknown target measurement unit: " .. (targetunit or "none provided"))
end
if (targetunitdata[1] ~= sourceunitdata[1]) then
return error("measurement unit mismatch: " .. l[1] .. ' and ' .. targetunitdata[1] )
end
local newvalue = value * sourceunitdata[2] / targetunitdata[2]
return p.displayvalue(newvalue, targetunit, displayformat)
end
function p.display(frame)
local args = frame.args
local value, origunit, targetunit = args[1], args[2], args[3]
local rounding = args.rounding
local showlink, showunit = args.showlink, args.showunit
if showunit == 'true' then
showunit = true
end
if showlink == 'true' then
showlink = true
end
displayformat = {showunit = showunit, showlink = showlink, rounding = rounding}
return p._convert(value, origunit, targetunit, displayformat)
end
return p