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
