进制转换 decimalism(string,number)免费

格式 : [10进制]number = decimalism( 字符串, 2/8/16)
适用场景 : 暂无

  1. function decimalism(a,b) --[[二进制、八进制、十六进制转十进制算法]]
  2. local b = b or 10 --[[十进制输入]]
  3. local i = 0
  4. local t = {["0"]=0,["1"]=1,["2"]=2,["3"]=3,["4"]=4,["5"]=5,["6"]=6,["7"]=7,["8"]=8,["9"]=9,["A"]=10,
  5. ["B"]=11,["C"]=12,["D"]=13,["E"]=14,["F"]=15,["a"]=10,["b"]=11,["c"]=12,["d"]=13,["e"]=14,["f"]=15} --[[16字符转数值]]
  6. local num={["整数"]=0,["小数"]=0}
  7. if type(a)=="string" then
  8. for word in string.gmatch(a, "[^.]+") do --[[按小数点分割]]
  9. i = i + 1
  10. if i==1 then
  11. local t1={}
  12. for w in string.gmatch(word, ".") do --[[分割每个数字]]
  13. table.insert(t1,1,t[w]) --[[整数倒序插入]]
  14. end
  15. for k,v in pairs(t1) do
  16. num["整数"]=num["整数"]+v*math.pow(b,k-1) --[[数值*个数-1次幂]]
  17. end
  18. elseif i==2 then
  19. local t1={}
  20. for w in string.gmatch(word, ".") do --[[分割每个数字]]
  21. table.insert(t1,t[w]) --[[小数正序插入]]
  22. end
  23. for k,v in pairs(t1) do
  24. num["小数"]=num["小数"]+v*math.pow(b,-k) --[[数值*-个数次幂]]
  25. end
  26. end
  27. end
  28. else
  29. print("不是字符串类型无法转换")
  30. end
  31. return num["整数"]+num["小数"]
  32. end
  33. local num16="7F.8" --[[十六进制]]
  34. local num2="101.01" --[[二进制]]
  35. print(decimalism(num16,16)) --[[127.5]]
  36. print(decimalism(num2,2)) --[[5.25]]