Mô đun:NumberSpell

Bách khoa toàn thư mở Wikipedia
Tài liệu mô đun[xem] [sửa] [lịch sử] [làm mới]

Mô đun này có một số và trả về các từ tiếng Anh tương đương. Cho ví dụ, "2" trở thành "hai" và "79" trở thành "bảy mươi chín". Các số phải là số nguyên từ 0 đến 100.

Cách sử dụng[sửa mã nguồn]

{{#gọi:NumberSpell|main|number}}

Các ví dụ[sửa mã nguồn]

  • {{#gọi:NumberSpell|main|8}} → tám
  • {{#gọi:NumberSpell|main|56}} → năm mươi sáu
  • {{#gọi:NumberSpell|main|101}}Lỗi: nhập vào phải là một số nguyên giữa 0 và 100

-- This module converts a number into its written English form.
-- For example, "2" becomes "two", and "79" becomes "seventy-nine".

local getArgs = require('Mô đun:Arguments').getArgs

local p = {}

local max = 100 -- The maximum number that can be parsed.

local ones = {
	[0] = 'không',
	[1] = 'một',
	[2] = 'hai',
	[3] = 'ba',
	[4] = 'bốn',
	[5] = 'năm',
	[6] = 'sáu',
	[7] = 'bảy',
	[8] = 'tám',
	[9] = 'chín'
}

local specials = {
	[10] = 'mười',
	[11] = 'mười một',
	[12] = 'mười hai',
	[13] = 'mười ba',
	[15] = 'mười lăm',
	[18] = 'mười tám',
	[20] = 'hai mươi',
	[30] = 'ba mươi',
	[40] = 'bốn mươi',
	[50] = 'năm mươi',
	[60] = 'sáu mươi',
	[70] = 'bảy mươi',
	[80] = 'tám mươi',
	[90] = 'chín mươi',
	[100] = 'một trăm'
}

local formatRules = {
	{num = 90, rule = 'chín mươi %s'},
	{num = 80, rule = 'tám mươi %s'},
	{num = 70, rule = 'bảy mươi %s'},
	{num = 60, rule = 'sáu mươi %s'},
	{num = 50, rule = 'năm mươi %s'},
	{num = 40, rule = 'bốn mươi %s'},
	{num = 30, rule = 'ba mươi %s'},
	{num = 20, rule = 'hai mươi %s'},
	{num = 10, rule = 'mười %s'}
}

function p.main(frame)
	local args = getArgs(frame)
	local num = tonumber(args[1])
	local success, result = pcall(p._main, num)
	if success then
		return result
	else
		return string.format('<strong class="error">Lỗi: %s</strong>', result) -- "result" is the error message.
	end
	return p._main(num)
end

function p._main(num)
	if type(num) ~= 'number' or math.floor(num) ~= num or num < 0 or num > max then
		error('nhập vào phải là một số nguyên giữa 0 và ' .. tostring(max), 2)
	end
	-- Check for numbers from 0 to 9.
	local onesVal = ones[num]
	if onesVal then
		return onesVal
	end
	-- Check for special numbers.
	local specialVal = specials[num]
	if specialVal then
		return specialVal
	end
	-- Construct the number from its format rule.
	onesVal = ones[num % 10]
	if not onesVal then
		error('Lỗi được không muốn đang phân tích nhập vào ' .. tostring(num))
	end
	for i, t in ipairs(formatRules) do
		if num >= t.num then
			return string.format(t.rule, onesVal)
		end
	end
	error('Không có quy tắc định dạng được tìm thấy nhập vào ' .. tostring(num))
end

return p