Module:Number

-- -- Has methods not already in the standard library by default --

local p = {}

---============================================================ -- add comma to separate thousands -- http://lua-users.org/wiki/FormattingNumbers -- function p.comma_value(amount) local formatted = amount while true do 		formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2') if (k==0) then break end end return formatted end

---============================================================ -- rounds a number to the nearest decimal places -- http://lua-users.org/wiki/FormattingNumbers -- function p.round(val, decimal) if (decimal) then return math.floor( (val * 10^decimal) + 0.5) / (10^decimal) else return math.floor(val+0.5) end end

--=================================================================== -- given a numeric value formats output with comma to separate thousands -- and rounded to given decimal places -- http://lua-users.org/wiki/FormattingNumbers -- function p.format_num(amount, decimal, prefix, neg_prefix) local str_amount, formatted, famount, remain

decimal = decimal or 2 -- default 2 decimal places neg_prefix = neg_prefix or "-" -- default negative sign

famount = math.abs(p.round(amount,decimal)) famount = math.floor(famount)

remain = p.round(math.abs(amount) - famount, decimal)

-- comma to separate the thousands formatted = p.comma_value(famount)

-- attach the decimal portion if (decimal > 0) then remain = string.sub(tostring(remain),3) formatted = formatted .. "." .. remain .. string.rep("0", decimal - string.len(remain)) end

-- attach prefix string e.g '$' formatted = (prefix or "") .. formatted

-- if value is negative then format accordingly if (amount<0) then if (neg_prefix=="") then formatted = "("..formatted ..")" else formatted = neg_prefix .. formatted end end

return formatted end

return p