[checked revision] | [checked revision] |
m (Protected "Module:MathUtil": Syncing content across wikis, if something seems broken as a result let me know ([Edit=Allow only administrators] (indefinite))) |
m (Syncing content across wikis, if something seems broken as a result let me know) |
||
Line 1: | Line 1: | ||
+ | local util_args = require('Module:ArgsUtil') |
||
+ | local util_text = require('Module:TextUtil') |
||
-- MathUtil |
-- MathUtil |
||
local p = {} |
local p = {} |
||
Line 14: | Line 16: | ||
bracket = bracket or 1 |
bracket = bracket or 1 |
||
return math.floor(v/bracket + p.sign(v) * 0.5) * bracket |
return math.floor(v/bracket + p.sign(v) * 0.5) * bracket |
||
+ | end |
||
+ | |||
+ | function p.percent(v, bracket) |
||
+ | return p.roundnum(v * 100, bracket or 2) .. '%' |
||
end |
end |
||
Line 26: | Line 32: | ||
end |
end |
||
return total |
return total |
||
+ | end |
||
+ | |||
+ | function p.tonumber(str) |
||
+ | if not str then return nil end |
||
+ | local raw_number = str:gsub(',','') |
||
+ | return tonumber(raw_number) |
||
+ | end |
||
+ | |||
+ | function p.formatNumber(str) |
||
+ | local num = tonumber(str) |
||
+ | if num then |
||
+ | return mw.getLanguage('en'):formatNum(num) |
||
+ | else |
||
+ | return str |
||
+ | end |
||
+ | end |
||
+ | |||
+ | function p.serializeNumber(N) |
||
+ | local chr = tostring(N):sub(-1) |
||
+ | local lookup = { ['1'] = 'st', ['2'] = 'nd', ['3'] = 'rd' } |
||
+ | return N .. (lookup[chr] or 'th') |
||
+ | end |
||
+ | |||
+ | function p.deserialize(str) |
||
+ | local deserialized = str:gsub('[A-Za-z]*','') |
||
+ | if deserialized == '' then |
||
+ | return nil |
||
+ | end |
||
+ | return deserialized |
||
+ | end |
||
+ | |||
+ | function p.deserializeRangeToTable(str) |
||
+ | str = str:gsub('[A-Za-z]*','') |
||
+ | return util_args.splitAndMap(str, '%-', tonumber) |
||
+ | end |
||
+ | |||
+ | function p.padleft(num, digits) |
||
+ | local str = tostring(num) |
||
+ | local tbl = util_text.split(str, '') |
||
+ | local len = #tbl |
||
+ | local outputTbl = {} |
||
+ | for k = 1, len do |
||
+ | outputTbl[k] = tbl[len + 1 - k] |
||
+ | end |
||
+ | for k = len + 1, digits do |
||
+ | outputTbl[k] = '0' |
||
+ | end |
||
+ | local outputReversed = table.concat(outputTbl, '') |
||
+ | return outputReversed:reverse() |
||
end |
end |
||
Revision as of 02:53, 24 June 2019
To edit the documentation or categories for this module, click here.
local util_args = require('Module:ArgsUtil')
local util_text = require('Module:TextUtil')
-- MathUtil
local p = {}
function p.sign(v)
if v == 0 then return 0 end
return (v > 0 and 1) or -1
end
function p.printWithSign(v)
return (v > 0 and ('+%s'):format(v)) or v
end
function p.roundnum(v, bracket)
bracket = bracket or 1
return math.floor(v/bracket + p.sign(v) * 0.5) * bracket
end
function p.percent(v, bracket)
return p.roundnum(v * 100, bracket or 2) .. '%'
end
function p.mod(a, b)
return a - math.floor(a/b)*b
end
function p.sum(tbl)
local total = 0
for _, v in pairs(tbl) do
total = total + v
end
return total
end
function p.tonumber(str)
if not str then return nil end
local raw_number = str:gsub(',','')
return tonumber(raw_number)
end
function p.formatNumber(str)
local num = tonumber(str)
if num then
return mw.getLanguage('en'):formatNum(num)
else
return str
end
end
function p.serializeNumber(N)
local chr = tostring(N):sub(-1)
local lookup = { ['1'] = 'st', ['2'] = 'nd', ['3'] = 'rd' }
return N .. (lookup[chr] or 'th')
end
function p.deserialize(str)
local deserialized = str:gsub('[A-Za-z]*','')
if deserialized == '' then
return nil
end
return deserialized
end
function p.deserializeRangeToTable(str)
str = str:gsub('[A-Za-z]*','')
return util_args.splitAndMap(str, '%-', tonumber)
end
function p.padleft(num, digits)
local str = tostring(num)
local tbl = util_text.split(str, '')
local len = #tbl
local outputTbl = {}
for k = 1, len do
outputTbl[k] = tbl[len + 1 - k]
end
for k = len + 1, digits do
outputTbl[k] = '0'
end
local outputReversed = table.concat(outputTbl, '')
return outputReversed:reverse()
end
return p