Modul:NumberSpell
Tampilan
| Modul ini dilindungi. Modul ini sangat mencolok yang digunakan oleh banyak halaman, atau sangat sering disubstitusikan. Karena vandalisme atau kesalahan akan mempengaruhi banyak halaman, dan suntingan kecil dapat memberi beban besar pada server, modul ini dilindungi dari penyuntingan. |
Modul ini mengamnbil sebuah angka dan mengembalikkan menjadi tulisan Indonesia. Misalnya, "2" menjadi "dua" dan "79" menjadi "tujuh puluh sembilan". Angka harus berupa bilangan bulat antara 0 dan 100.
Penggunaan
{{#invoke:NumberSpell|main|number}}
Contoh
{{#invoke:NumberSpell|main|8}}→ delapan{{#invoke:NumberSpell|main|56}}→ lima puluh enam{{#invoke:NumberSpell|main|101}}→ Kesalahan: masukan harus sebuah bilangan bulat antara 0 dan 100
-- This module converts a number into its written English form.
-- For example, "2" becomes "two", and "79" becomes "seventy-nine".
local getArgs = require('Module:Arguments').getArgs
local p = {}
local max = 100 -- The maximum number that can be parsed.
local ones = {
[0] = 'nol',
[1] = 'satu',
[2] = 'dua',
[3] = 'tiga',
[4] = 'empat',
[5] = 'lima',
[6] = 'enam',
[7] = 'tujuh',
[8] = 'delapan',
[9] = 'sembilan'
}
local specials = {
[10] = 'sepuluh',
[11] = 'sebelas',
[20] = 'dua puluh',
[30] = 'tiga puluh',
[40] = 'empat puluh',
[50] = 'lima puluh',
[60] = 'enam puluh',
[70] = 'tujuh puluh',
[80] = 'delapan puluh',
[90] = 'sembilan puluh',
[100] = 'seratus'
}
local formatRules = {
{num = 90, rule = 'sembilan puluh %s'},
{num = 80, rule = 'delapan puluh %s'},
{num = 70, rule = 'tujuh puluh %s'},
{num = 60, rule = 'enam puluh %s'},
{num = 50, rule = 'lima puluh %s'},
{num = 40, rule = 'empat puluh %s'},
{num = 30, rule = 'tiga puluh %s'},
{num = 20, rule = 'dua puluh %s'},
{num = 10, rule = '%s belas'}
}
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">Kesalahan: %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('masukan harus sebuah bilangan bulat antara 0 dan ' .. 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('Terjadi kesalahan tak terduga saat mengurai masukan ' .. tostring(num))
end
for i, t in ipairs(formatRules) do
if num >= t.num then
return string.format(t.rule, onesVal)
end
end
error('Tidak ditemukan aturan format untuk masukan ' .. tostring(num))
end
return p