Module:NumberToText: Difference between revisions

From Inkipedia, the Splatoon wiki
(moved tonumber conversion to args function)
m (Protected "Module:NumberToText" ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite)))
 
(3 intermediate revisions by one other user not shown)
Line 1: Line 1:
local p = {}
local p = {}


function p.textFromNumber(args)
function p.textFromNumber(number)
number = tonumber(number)
local oneslist = { [0]="", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }
local oneslist = { [0]="", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }
local teenlist = { [0]="ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" }
local teenlist = { [0]="ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" }
Line 8: Line 9:
local abs, floor = math.abs, math.floor
local abs, floor = math.abs, math.floor
if (args[1] == 0) then return "zero" end
if (number == 0) then return "zero" end
local absnum, lion, result = abs(args[1]), 0, ""
local absnum, lion, result = abs(number), 0, ""
local function dashed(s) return s=="" and s or "-"..s end
local function dashed(s) return s=="" and s or "-"..s end
local function spaced(s) return s=="" and s or " "..s end
local function spaced(s) return s=="" and s or " "..s end
Line 22: Line 23:
lion = lion + 1
lion = lion + 1
end
end
if (args[1] < 0) then result = "minus " .. result end
if (number < 0) then result = "minus " .. result end
return result
return result
end
end
Line 28: Line 29:
function p.main(frame)
function p.main(frame)
local args = frame:getParent().args
local args = frame:getParent().args
args[1] = tonumber(args[1], args[2])
local number = args[1]
return p.textFromNumber(args)
return p.textFromNumber(number)
end
end


return p
return p
-- Thank https://rosettacode.org/wiki/Number_names#Lua
-- Thank https://rosettacode.org/wiki/Number_names#Lua

Latest revision as of 07:10, 11 February 2024

Spells a given number in English.

Usage

{{NumberToText|<number>}}

number Unnamed, required Number to be converted to text.

local p = {}

function p.textFromNumber(number)
	number = tonumber(number)
	local oneslist = { [0]="", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }
	local teenlist = { [0]="ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" }
	local tenslist = { [0]="", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" }
	local lionlist = { [0]="", "thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion", "septillion", "octillion", "nonillion", "decillion" }
	local abs, floor = math.abs, math.floor
	
	if (number == 0) then return "zero" end
	local absnum, lion, result = abs(number), 0, ""
	local function dashed(s) return s=="" and s or "-"..s end
	local function spaced(s) return s=="" and s or " "..s end
	while (absnum > 0) do
		local word, ones, tens, huns = "", absnum%10, floor(absnum/10)%10, floor(absnum/100)%10
		if (tens==0) then word = oneslist[ones]
		elseif (tens==1) then word = teenlist[ones]
		else word = tenslist[tens] .. dashed(oneslist[ones]) end
		if (huns > 0) then word = oneslist[huns] .. " hundred" .. spaced(word) end
		if (word ~= "") then result = word .. spaced(lionlist[lion]) .. spaced(result) end
		absnum = floor(absnum / 1000)
		lion = lion + 1
	end
	if (number < 0) then result = "minus " .. result end
	return result
end

function p.main(frame)
	local args = frame:getParent().args
	local number = args[1]
	return p.textFromNumber(number)
end

return p
-- Thank https://rosettacode.org/wiki/Number_names#Lua