Module:Coins2: Difference between revisions
Jump to navigation
Jump to search
(Created page with "-- <pre> -- Implements {{Coins}} -- Original source: http://runescape.wiki/w/Module:Coins?action=history local p = {} local function amount(a) -- convert used globals to locals where possible to improve performance local math = math local string = string local table = table local mw = mw local expr = mw.ext.ParserFunctions.expr local ret = {'<span class="coins coins-', true, true, true, '</span>'} -- strip commas from input -- @example '123,456,789'...") |
No edit summary |
||
Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
local function amount(a) | local function amount(a) | ||
-- convert used globals to locals where possible to improve performance | |||
local math = math | |||
local string = string | |||
local table = table | |||
local mw = mw | |||
local expr = mw.ext.ParserFunctions.expr | |||
-- strip commas from input | |||
a = string.gsub(a, ',', '') | |||
-- check for decimals/division to determine if output should have forced 2 decimal places | |||
local has_decimal_or_division = false | |||
if string.match(a, "[./]") then | |||
has_decimal_or_division = true | |||
end | |||
-- for performance reasons, only calculate expr if required | |||
if tonumber(a) == nil then | |||
a = tonumber(expr(a)) or 0 | |||
end | |||
-- round to two decimal places | |||
a = math.floor(a * 100 + 0.5) / 100 | |||
-- format number with commas | |||
if has_decimal_or_division then | |||
local b = 0 | |||
a, b = math.modf(a) | |||
b = math.abs(b) | |||
-- hack fix for formatNum stripping the sign from -0 | |||
if (a > 999 or a < -999) then | |||
a = mw.language.getContentLanguage():formatNum(a) | |||
end | |||
b = string.sub(string.format("%.2f", b),2) | |||
return a .. b | |||
else | |||
return mw.language.getContentLanguage():formatNum(a) | |||
end | |||
end | end | ||
Line 77: | Line 46: | ||
-- | -- | ||
function p.amount(frame) | function p.amount(frame) | ||
local args = frame:getParent().args | |||
-- for {{coins|111}} | |||
local a = args[1] or '0' | |||
return amount(a) | |||
end | end | ||
Line 87: | Line 56: | ||
-- | -- | ||
function p._amount(a) | function p._amount(a) | ||
a = tostring(a) or '0' | |||
return amount(a) | |||
end | end | ||
return p | return p |
Revision as of 09:26, 19 May 2024
Documentation for this module may be created at Module:Coins2/doc
local p = {}
local function amount(a)
-- convert used globals to locals where possible to improve performance
local math = math
local string = string
local table = table
local mw = mw
local expr = mw.ext.ParserFunctions.expr
-- strip commas from input
a = string.gsub(a, ',', '')
-- check for decimals/division to determine if output should have forced 2 decimal places
local has_decimal_or_division = false
if string.match(a, "[./]") then
has_decimal_or_division = true
end
-- for performance reasons, only calculate expr if required
if tonumber(a) == nil then
a = tonumber(expr(a)) or 0
end
-- round to two decimal places
a = math.floor(a * 100 + 0.5) / 100
-- format number with commas
if has_decimal_or_division then
local b = 0
a, b = math.modf(a)
b = math.abs(b)
-- hack fix for formatNum stripping the sign from -0
if (a > 999 or a < -999) then
a = mw.language.getContentLanguage():formatNum(a)
end
b = string.sub(string.format("%.2f", b),2)
return a .. b
else
return mw.language.getContentLanguage():formatNum(a)
end
end
--
-- {{Coins}} access point
--
function p.amount(frame)
local args = frame:getParent().args
-- for {{coins|111}}
local a = args[1] or '0'
return amount(a)
end
--
-- Module access point
--
function p._amount(a)
a = tostring(a) or '0'
return amount(a)
end
return p