Lua 数字转汉字终极版(0-9999)

查看了网上各种方法五花八门,有些数字的转化上总感觉不舒服,看图

image.png
image.png

看来走捷径是不行的,自己动手丰衣足食,干。

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

见证奇迹的时候到了


image.png
image.png

image.png

image.png

image.png

image.png

image.png

你可能感兴趣的:(Lua 数字转汉字终极版(0-9999))