Module:Decimals
Revision as of 01:50, 15 July 2015 by Jackmcbarn (talk) (Undid revision 671492526 by Alakzi (talk): This results in errors being silently suppressed, rather than doing anything to actually fix them.)
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
Usage
From other Lua modules
local roundAndPad = require('Module:Decimals')._main
result = roundAndPad(n, decimals)
From wikitext
{{#invoke:Decimals|main|n|decimals}}
For more information, see Template:Decimals.
require('Module:No globals') local p = {} function p._main(n, d) local num = tonumber(n) if not num then error('Unable to convert "' .. tostring(n) .. '" to a number') end local decimals = tonumber(d) if not decimals then error('Unable to convert "' .. tostring(d) .. '" to a number') end local maxDecimals = 14 - math.floor(math.log10(num)) -- to allow a maximum of 15 significant figures, which is the highest guaranteed correct with doubles if decimals > maxDecimals then decimals = maxDecimals end local mult = 10^decimals num = math.floor(num * mult + 0.5) / mult if decimals < 0 then return tostring(num) else return string.format('%.' .. decimals .. 'f', num) end end function p.main(frame) local args, pargs = frame.args, frame:getParent().args return p._main(mw.ext.ParserFunctions.expr(args[1] or pargs[1]), mw.ext.ParserFunctions.expr(args[2] or pargs[2])) end return p