Module:Decimals
This Lua module is used on approximately 5,600 pages, so changes to it will be widely noticed. Please test any changes in the module's /sandbox or /testcases subpages. Please consider discussing changes on the talk page before implementing 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
<syntaxhighlight lang="lua"> local roundAndPad = require('Module:Decimals')._main result = roundAndPad(n, decimals) </syntaxhighlight>
From wikitext
{{#invoke:Decimals|main|n|decimals[|error=string to display instead of error message]}}
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 local function work() return p._main( mw.ext.ParserFunctions.expr(args[1] or pargs[1]), mw.ext.ParserFunctions.expr(args[2] or pargs[2]) ) end local success, result = pcall(work) if success then return result end local errtext = args.error or pargs.error if errtext then return errtext end error(result, 0) end return p