Lua 数字转汉字终极版(0-9999)
2019-12-26 本文已影响0人
火星局
查看了网上各种方法五花八门,有些数字的转化上总感觉不舒服,看图


看来走捷径是不行的,自己动手丰衣足食,干。
local hzUnit = {"十", "百", "千", "万", "亿"}
local hzNum = {"一", "二", "三", "四", "五", "六", "七", "八", "九"}
local hzZero = {"零"}
function numberToString(szNum)
local iLen = 0
local str = ''
if nil == tonumber(szNum) then
return tostring(szNum)
end
iLen =string.len(szNum)
--0~9
if iLen == 1 then
if szNum == 0 then
str = hzZero[1]
elseif szNum > 0 then
str = hzNum[szNum]
end
end
--10~99
if iLen == 2 then
iNum = tonumber(string.sub(szNum,1,1))
iNum2 = tonumber(string.sub(szNum,2,2))
-- print("iNum->"..iNum.."--iNum2->"..iNum2)
if iNum ==1 then
if iNum2 == 0 then
str = hzUnit[1]
elseif iNum2 > 0 then
str = hzUnit[1]..hzNum[iNum2]
end
elseif iNum >=2 and iNum<=9 then
if iNum2 == 0 then
str =hzNum[iNum].. hzUnit[1]
elseif iNum2 > 0 then
str = hzNum[iNum]..hzUnit[1]..hzNum[iNum2]
end
end
end
--100~999
if iLen == 3 then
iNum = tonumber(string.sub(szNum,1,1))
iNum2 = tonumber(string.sub(szNum,2,2))
iNum3 = tonumber(string.sub(szNum,3,3))
-- print("iNum->"..iNum.."--iNum2->"..iNum2.."--iNum3-->"..iNum3)
if iNum2 == 0 and iNum3 == 0 then --100,200,...900
str =hzNum[iNum]..hzUnit[2]
elseif iNum2 == 0 then
str =hzNum[iNum]..hzUnit[2]..hzZero[1]..hzNum[iNum3]
elseif iNum2 >= 0 and iNum3 == 0 then
str =hzNum[iNum]..hzUnit[2]..hzNum[iNum2]..hzUnit[1]
elseif iNum2 >= 0 and iNum3 > 0 then
str =hzNum[iNum]..hzUnit[2]..hzNum[iNum2]..hzUnit[1]..hzNum[iNum3]
end
end
--1000~9999
if iLen == 4 then
iNum = tonumber(string.sub(szNum,1,1))
iNum2 = tonumber(string.sub(szNum,2,2))
iNum3 = tonumber(string.sub(szNum,3,3))
iNum4 = tonumber(string.sub(szNum,4,4))
-- print("iNum->"..iNum.."--iNum2->"..iNum2.."--iNum3->"..iNum3.."--iNum4->"..iNum4)
if iNum2 == 0 and iNum3 == 0 and iNum4 == 0 then --1000,2000,...9000
str =hzNum[iNum]..hzUnit[3]
elseif iNum2 == 0 and iNum3 == 0 then --1001 ... 1009
str =hzNum[iNum]..hzUnit[3]..hzZero[1]..hzNum[iNum4]
elseif iNum2 == 0 and iNum3 > 0 then --1010 ...1099
if iNum4 == 0 then
str =hzNum[iNum]..hzUnit[3]..hzZero[1]..hzNum[iNum3]..hzUnit[1]
else
str =hzNum[iNum]..hzUnit[3]..hzZero[1]..hzNum[iNum3]..hzUnit[1]..hzNum[iNum4]
end
elseif iNum2 > 0 and iNum3 == 0 and iNum4 == 0 then -- 1100
str =hzNum[iNum]..hzUnit[3]..hzNum[iNum2]..hzUnit[2]
elseif iNum2 > 0 and iNum3 == 0 and iNum4 > 0 then --1101 .. 1109
str =hzNum[iNum]..hzUnit[3]..hzNum[iNum2]..hzUnit[2]..hzZero[1]..hzNum[iNum4]
elseif iNum2 > 0 and iNum3 > 0 and iNum4 == 0 then --1110 ..
str =hzNum[iNum]..hzUnit[3]..hzNum[iNum2]..hzUnit[2]..hzNum[iNum3]..hzUnit[1]
elseif iNum2 > 0 and iNum3 > 0 and iNum4 > 0 then --1111 ..
str =hzNum[iNum]..hzUnit[3]..hzNum[iNum2]..hzUnit[2]..hzNum[iNum3]..hzUnit[1]..hzNum[iNum4]
end
end
return str
end
--[[for i=0,99 do
print("入参:"..i,"出参:"..numberToString(i))
end--]]
--[[for i=100,999 do
print("入参:"..i,"出参:"..numberToString(i))
end--]]
for i=1000,2100 do
print("入参:"..i,"出参:"..numberToString(i))
end
见证奇迹的时候到了






