Modul:BaseConvert
Dokumentacija modula | [uredi] [historija] [ ] |
Ova dokumentacija je prikazana u Modul:BaseConvert/dok. |
Konvertuje brojeve na specifične baze između 2 i 36. U šablonima se može krostititi kao {{binary}}, {{octal}}, {{hexadecimal}}, itd.
Primjer:
local BaseConvert = require('Module:BaseConvert')
BaseConvert.convert({n = 14600926, base = 16}) -- vraća 'DECADE'
Parametri:
- n - (neophodno) broj koji se želi konvertirati, naveden kao niz. Također može biti i broj, ako je unoseća baza jednaka broju 10.
- base - (neophodno) baza prema kojoj se broj treba konvertirati. Može biti između 2 i 36.
- from - baza broja koji se unosi. Ako se ne navede onda je 10 (ili 16 ako je unos na početku ima '0x'). Ako je unos razlomak, onda se samo može koristiti baza 10.
- precision - broj cifri da se izbaci poslije tačke. Slijedeće nule će biti dodane ako bude potrebno. Ako ovaj parametar nije naveden, onda će se do 10 cifri pokazati.
- width - minimalni broj cifri da se prikaže prije tačke. Vodeće nule će biti dodane, ako ovo bude potrebno.
- default - Koja vrijednost da se vrati ako je parametar n prazan ili ako nije numerički.
- prefix / suffix - koji wiki-tekst da se izbaci prije/poslije rezultata. Neće biti dodano ako je n prazan ili ako nije numerički.
Ovaj visokorizični šablon je zaštićen od izmjena da bi se spriječio vandalizam. Pogledajte pravila o zaštiti stranica i protokol zaključavanja za više informacija. Diskusije o bilo kojim izmjenama možete voditi na stranici za razgovor. Ako smatrate da je potrebno, možete Podnesi zahtjev za uređivanje nekom od administratora da izvrši izmjenu ako je ona nekontroverzna ili ako se postigao konsenzus. Također možete zatražiti da se zaštita na ovoj stranici ukloni. |
local p = {}
local digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
function normalizeFullWidthChars(s)
return mw.ustring.gsub(s, '[!-~]', function(s)
return mw.ustring.char(mw.ustring.codepoint(s, 1) - 0xFEE0)
end)
end
function _convert(n, base, from, precision, width, default, prefix, suffix)
n = '' .. n -- convert to a string
-- strip off any leading '0x' (unless x is a valid digit in the input base)
from = tonumber(from)
if not from or from < 34 then
local c
n, c = n:gsub('^(-?)0[Xx]', '%1')
if c > 0 and not from then from = 16 end
end
-- check for a negative sign. Do this while the input is still in string form,
-- because tonumber doesn't support negative numbers in non-10 bases.
local sign = ''
local c
n, c = n:gsub('^-', '')
if c > 0 then sign = '-' end
-- replace any full-width Unicode characters in the string with their ASCII equivalents
n = normalizeFullWidthChars(n)
-- handle scientific notation with whitespace around the 'e' e.g. '5 e7'
n = n:gsub('%s*[eE]%s*', 'e')
from = from or 10
local num = tonumber(n, from)
base = tonumber(base)
precision = tonumber(precision)
width = tonumber(width)
if not num or not base then return default or n end
local i, f = math.modf(num)
local t = {}
repeat
local d = (i % base) + 1
i = math.floor(i / base)
table.insert(t, 1, digits:sub(d, d))
until i == 0
while #t < (width or 0) do
table.insert(t, 1, '0')
end
local intPart = table.concat(t, '')
-- compute the fractional part
local tf = {}
while f > 0 and #tf < (precision or 10) do
f = f * base
i, f = math.modf(f)
table.insert(tf, digits:sub(i + 1, i + 1))
end
-- add trailing zeros if needed
if precision and #tf < precision then
for i = 1, precision - #tf do
table.insert(tf, '0')
end
end
fracPart = table.concat(tf, '')
-- remove trailing zeros if not needed
if not precision then
fracPart = fracPart:gsub('0*$', '')
end
-- add the radix point if needed
if #fracPart > 0 then
fracPart = '.' .. fracPart
end
return (prefix or '') .. sign .. intPart .. fracPart .. (suffix or '')
end
function p.convert(frame)
-- Allow for invocation via #invoke or directly from another module
local args
if frame == mw.getCurrentFrame() then
args = frame.args
else
args = frame
end
local n = args.n
local base = args.base
local from = args.from
local precision = args.precision
local width = args.width
local default = args.default
local prefix = args.prefix
local suffix = args.suffix
return _convert(n, base, from, precision, width, default, prefix, suffix)
end
return p