Module:希顶字母数字:修订间差异
建立内容为“function num.xdi8LexiNum(frame) local input = frame.args[1] local p, _ = string.find(input, '.', 1, true) if not p then return num._partialInt…”的新页面 标签:mobile web edit mobile edit |
无编辑摘要 标签:mobile web edit mobile edit |
||
(未显示同一用户的2个中间版本) | |||
第1行: | 第1行: | ||
local num = {} | |||
function num.xdi8LexiNum(frame) | function num.xdi8LexiNum(frame) | ||
local input = frame.args[1] | local input = frame.args[1] | ||
第16行: | 第17行: | ||
for i = 1, len do | for i = 1, len do | ||
local dig = string.byte(input, i) - 48 | local dig = string.byte(input, i) - 48 | ||
if pos == 45 then | |||
result = '′' .. result | |||
pos = 0 | |||
end | |||
if dig < 0 or dig > 9 then | if dig < 0 or dig > 9 then | ||
return nil | return nil | ||
第22行: | 第27行: | ||
end | end | ||
pos = pos + 9 | pos = pos + 9 | ||
end | end | ||
if result == '' then | if result == '' then | ||
第39行: | 第40行: | ||
for i = 1, len do | for i = 1, len do | ||
local dig = string.byte(input, i) - 48 | local dig = string.byte(input, i) - 48 | ||
if pos == 45 then | |||
result = result .. '′' | |||
pos = 0 | |||
end | |||
if dig < 0 or dig > 9 then | if dig < 0 or dig > 9 then | ||
return nil | return nil | ||
第45行: | 第50行: | ||
end | end | ||
pos = pos + 9 | pos = pos + 9 | ||
end | |||
if result == '' then | |||
result = '′' | |||
end | end | ||
return result | return result |
2021年2月2日 (二) 19:14的最新版本
本模块用于实现阿拉伯数字转希顶字母数字。
local num = {}
function num.xdi8LexiNum(frame)
local input = frame.args[1]
local p, _ = string.find(input, '.', 1, true)
if not p then
return num._partialInt(input) or num._error('在转换整数时失败')
else
return (num._partialInt(string.sub(input, 1, p - 1)) .. '.' .. num._partialFrac(string.sub(input, p + 1))) or num._error('在转换实数时失败')
end
end
function num._partialInt(input)
local pos = 0
local result = ''
local len = string.len(input)
input = string.reverse(input)
for i = 1, len do
local dig = string.byte(input, i) - 48
if pos == 45 then
result = '′' .. result
pos = 0
end
if dig < 0 or dig > 9 then
return nil
elseif dig ~= 0 then
result = string.char(string.byte('bpmwjqxynzDsrHNldtgkh45vF7BcfuaoeEAYL62T83V1i', pos + dig)) .. result
end
pos = pos + 9
end
if result == '' then
result = '′'
end
return result
end
function num._partialFrac(input)
local pos = 0
local result = ''
local len = string.len(input)
for i = 1, len do
local dig = string.byte(input, i) - 48
if pos == 45 then
result = result .. '′'
pos = 0
end
if dig < 0 or dig > 9 then
return nil
elseif dig ~= 0 then
result = result .. string.char(string.byte('bpmwjqxynzDsrHNldtgkh45vF7BcfuaoeEAYL62T83V1i', pos + dig))
end
pos = pos + 9
end
if result == '' then
result = '′'
end
return result
end
-- 复制自[[模块:String]]
function num._error( error_str )
local frame = mw.getCurrentFrame();
local error_category = frame.args.error_category or 'Errors reported by Module 希顶字母数字';
local ignore_errors = frame.args.ignore_errors or false;
local no_category = frame.args.no_category or false;
local error_str = '<strong class="error">希顶字母数字模块错误: ' .. error_str .. '</strong>';
if error_category ~= '' then
error_str = '[[Category:' .. error_category .. ']]' .. error_str;
end
return error_str;
end
return num