进制转换 decimalism(string,number)
免费
格式 : [10进制]number = decimalism( 字符串, 2/8/16)
适用场景 : 暂无
function decimalism(a,b) --[[二进制、八进制、十六进制转十进制算法]]
local b = b or 10 --[[十进制输入]]
local i = 0
local t = {["0"]=0,["1"]=1,["2"]=2,["3"]=3,["4"]=4,["5"]=5,["6"]=6,["7"]=7,["8"]=8,["9"]=9,["A"]=10,
["B"]=11,["C"]=12,["D"]=13,["E"]=14,["F"]=15,["a"]=10,["b"]=11,["c"]=12,["d"]=13,["e"]=14,["f"]=15} --[[16字符转数值]]
local num={["整数"]=0,["小数"]=0}
if type(a)=="string" then
for word in string.gmatch(a, "[^.]+") do --[[按小数点分割]]
i = i + 1
if i==1 then
local t1={}
for w in string.gmatch(word, ".") do --[[分割每个数字]]
table.insert(t1,1,t[w]) --[[整数倒序插入]]
end
for k,v in pairs(t1) do
num["整数"]=num["整数"]+v*math.pow(b,k-1) --[[数值*个数-1次幂]]
end
elseif i==2 then
local t1={}
for w in string.gmatch(word, ".") do --[[分割每个数字]]
table.insert(t1,t[w]) --[[小数正序插入]]
end
for k,v in pairs(t1) do
num["小数"]=num["小数"]+v*math.pow(b,-k) --[[数值*-个数次幂]]
end
end
end
else
print("不是字符串类型无法转换")
end
return num["整数"]+num["小数"]
end
local num16="7F.8" --[[十六进制]]
local num2="101.01" --[[二进制]]
print(decimalism(num16,16)) --[[127.5]]
print(decimalism(num2,2)) --[[5.25]]