Moduł:Brudnopis/Paweł Ziemian/Wikidane/formatQuantity1
Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Brudnopis/Paweł Ziemian/Wikidane/formatQuantity1/opis
local i18n = mw.loadData("Moduł:Wikidane/data").quantityFormats
local function selectRoundCoefficients(value)
local num = math.abs(value)
if num > i18n.maximumAmount then
return false, "", math.floor(num * i18n.maximumVarFactor)
end
for i, v in ipairs(i18n) do
if num > v.amount then
return v.factor, v.suffix, v.minvar
end
end
return false, "", 0
end
return {
scope = "snak",
format = function(snak, options)
local amount = tonumber(snak.datavalue.value.amount)
local upperVar = tonumber(snak.datavalue.value.upperBound or amount) - amount
local lowerVar = amount - tonumber(snak.datavalue.value.lowerBound or amount)
local div, suffix, var = selectRoundCoefficients(amount)
local lang = mw.getContentLanguage()
if (div == 1) or not div then
if (upperVar == 0) and (lowerVar == 0) then
return tostring(amount)
elseif math.max(upperVar, lowerVar) <= var then
return string.format(i18n.around, lang:formatNum(amount))
elseif upperVar == lowerVar then
return string.format(i18n.variance, lang:formatNum(amount), lang:formatNum(upperVar))
else
return string.format(i18n.between, lang:formatNum(tonumber(snak.datavalue.value.lowerBound)), lang:formatNum(tonumber(snak.datavalue.value.upperBound)))
end
elseif div then
if math.max(upperVar, lowerVar) <= var then
local atxt = lang:formatNum(tonumber(string.format("%.2f", amount / div)))..suffix
return string.format(i18n.around, atxt)
elseif upperVar == lowerVar then
local atxt = lang:formatNum(tonumber(string.format("%.2f", amount / div)))..suffix
local vtxt = lang:formatNum(tonumber(string.format("%.2f", upperVar / div)))..suffix
return string.format(i18n.variance, atxt, vtxt)
else
local ltxt = lang:formatNum(tonumber(string.format("%.2f", tonumber(snak.datavalue.value.lowerBound) / div)))..suffix
local utxt = lang:formatNum(tonumber(string.format("%.2f", tonumber(snak.datavalue.value.upperBound) / div)))..suffix
return string.format(i18n.between, ltxt, utxt)
end
end
end,
}