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  | 
				||
| (One intermediate revision by the same user not shown) | |||
| 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 if necessary  | |||
    if has_decimal_or_division then  | |||
        a = math.floor(a * 100 + 0.5) / 100  | |||
    else  | |||
        a = math.floor(a + 0.5)  | |||
    end  | |||
    -- format number with commas  | |||
    local formatted_number  | |||
    if has_decimal_or_division then  | |||
        local integer_part, fractional_part = math.modf(a)  | |||
        fractional_part = math.abs(fractional_part)  | |||
        if (integer_part > 999 or integer_part < -999) then  | |||
            integer_part = mw.language.getContentLanguage():formatNum(integer_part)  | |||
        end  | |||
        if fractional_part == 0 then  | |||
            formatted_number = tostring(integer_part)  | |||
        else  | |||
            fractional_part = string.sub(string.format("%.2f", fractional_part), 2)  | |||
            formatted_number = integer_part .. fractional_part  | |||
        end  | |||
    else  | |||
        formatted_number = mw.language.getContentLanguage():formatNum(a)  | |||
    end  | |||
    return formatted_number  | |||
end  | end  | ||
| Line 77: | Line 57: | ||
--  | --  | ||
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 67: | ||
--  | --  | ||
function p._amount(a)  | function p._amount(a)  | ||
    a = tostring(a) or '0'  | |||
    return amount(a)  | |||
end  | end  | ||
return p  | return p  | ||
Latest revision as of 09:28, 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 if necessary
    if has_decimal_or_division then
        a = math.floor(a * 100 + 0.5) / 100
    else
        a = math.floor(a + 0.5)
    end
    -- format number with commas
    local formatted_number
    if has_decimal_or_division then
        local integer_part, fractional_part = math.modf(a)
        fractional_part = math.abs(fractional_part)
        if (integer_part > 999 or integer_part < -999) then
            integer_part = mw.language.getContentLanguage():formatNum(integer_part)
        end
        if fractional_part == 0 then
            formatted_number = tostring(integer_part)
        else
            fractional_part = string.sub(string.format("%.2f", fractional_part), 2)
            formatted_number = integer_part .. fractional_part
        end
    else
        formatted_number = mw.language.getContentLanguage():formatNum(a)
    end
    return formatted_number
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