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 p = {}
local referenceunits = {
length = 'metre',
area = 'squaremeter',
}
local units = {-- {grandeur mesurée, valeur par rapport à l'unité de référence, symbole, élément wikidata, lien, libellé singulier, libellé pluriel}
-- le lien et le libellé singulier pourraient-être récupérés de l'élément wikidata, mais c'est beaucoup moins efficient
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._display(value, sourceunit, targetunit, rounding, displayformat)
if not value then
return nil
end
if type(value) == 'string' then
value = tonumber(value)
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]
if rounding then
newvalue = math_mod._round( newvalue, rounding )
end
if not displayformat or type(displayformat) ~= 'table' then
displayformat = {}
end
local unit, link -- l'unité de mesure, telle qu'elle doit être affichée
if displayformat.showunit == 'long' then -- format long montrer l'unité en entier
if newvalue > 1 then
unit = targetunitdata[7]
else
unit = targetunitdata[6] end
elseif displayformat.showunit then
unit = targetunitdata[3]
end
if type( displayformat.showlink == 'string') then
link = displayformat.showlink
elseif displayformat.showlink == true then
link = targetunitdata[5]
end
if unit and link then
unit = '[[' .. link .. '|' .. unit .. ']]'
end
if unit then
unit = ' ' .. unit
end
return tostring(newvalue) .. (unit or '')
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}
return p._display(value, origunit, targetunit, rounding, displayformat)
end
return p