Module:Sandbox: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
function p._main(n, d) | |||
function p. | local num = tonumber(n) | ||
if not | 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 | end | ||
local | 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 | 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 | ||
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 | return p |
Revision as of 17:54, 28 April 2015
This page is not an actual Scribunto module. It exists to provide editors a place to create experimental modules.
Naming your modules
To keep things tidy, please use the following format to name your experimental modules:
Module:Sandbox/Your username/Module name
Cleaning up unused modules
Experimental modules may be deleted by admins upon request or after a long period of inactivity.
List of modules in this area
For a list of the experimental modules under Module:Sandbox, see Special:PrefixIndex/Module:Sandbox/.
The above documentation is transcluded from Module:Sandbox/doc.
Editors can experiment in this module's sandbox and testcases pages.
Subpages of this module.
Editors can experiment in this module's sandbox and testcases pages.
Subpages of this module.
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