local p = local words = -- We don't need to go higher than this, no-one knows what an octillion is.
-- For use by other scripts. Takes arguments:-- - 1: string or number, value to convert-- - forcenum: string for Template:Yesno, forces a result in digits for all n ≥ 10.-- - formating options for spellnum: zero, adj, ord, usfunction p.spellnum(args) local frame = mw.getCurrentFrame local numeral = tonumber(args[1]) local pass_zero = "zero" if args['zero'] ~= nil and args['zero'] ~= then pass_zero = args['zero'] end -- Always return numerals for negative numbers, non-integers, and if (forcenum and numeral >= 10). if numeral < 0 or math.fmod(numeral, 1) ~= 0 or (numeral >= 10 and frame:expandTemplate
-- Convert numeral to words local spelled = frame:expandTemplate -- Return numerals if more than two words would be needed, else return words if mw.ustring.find(spelled,'%a+[%-]%a+[%-]%a+') then -- Handle numbers larger than one million if numeral >= 1000000 and numeral <= 1000000000000000 then local size = math.min(4, math.floor(math.log10(numeral) / 3)) numeral = numeral / 1000^size return [1 + math.floor(math.log10(numeral))]:format(numeral) .. words[size] end return mw.language.getContentLanguage:formatNum(numeral) else return spelled endend
function p.main(frame) return p.spellnum(frame.args)end
return p