Lua 阿拉伯数字转中文

阿拉伯数字转中文, 在别人基础上修改, 去掉末尾多余的”零”, 读法更贴合实际, 数字很大时候还是有不合理的地方, 但是已经够我用了

function  numberToString(szNum)
    ---阿拉伯数字转中文大写
    local szChMoney = ""
    local iLen = 0
    local iNum = 0
    local iAddZero = 0
    local hzUnit = {"", "十", "百", "千", "万", "十", "百", "千", "亿","十", "百", "千", "万", "十", "百", "千"}
    local hzNum = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}

    if nil == tonumber(szNum) then
        return tostring(szNum)
    end

    iLen =string.len(szNum)
    if iLen > 10 or iLen == 0 or tonumber(szNum) < 0 then
        return tostring(szNum)
    end

    for i = 1, iLen  do
        iNum = string.sub(szNum,i,i)
        if iNum == 0 and i ~= iLen then
            iAddZero = iAddZero + 1
        else
            if iAddZero > 0 then
            szChMoney = szChMoney..hzNum[1]
        end
            szChMoney = szChMoney..hzNum[iNum + 1] --//转换为相应的数字
            iAddZero = 0
        end
        if (iAddZero < 4) and (0 == (iLen - i) % 4 or 0 ~= tonumber(iNum)) then
            szChMoney = szChMoney..hzUnit[iLen-i+1]
        end
    end
    local function removeZero(num)
        --去掉末尾多余的 零
        num = tostring(num)
        local szLen = string.len(num)
        local zero_num = 0
        for i = szLen, 1, -3 do
            szNum = string.sub(num,i-2,i)
            if szNum == hzNum[1] then
                zero_num = zero_num + 1
            else
                break
            end
        end
        num = string.sub(num, 1,szLen - zero_num * 3)
        szNum = string.sub(num, 1,6)
        --- 开头的 "一十" 转成 "十" , 贴近人的读法
        if szNum == hzNum[2]..hzUnit[2] then
            num = string.sub(num, 4, string.len(num))
        end
        return num
    end
    return removeZero(szChMoney)
end
for i = 1 ,200 do
   print(numberToString(i))
end

输出看一下:

一
二
三
四
五
六
七
八
九
十
十一
十二
十三
十四
十五
十六
十七
十八
十九
二十
二十一
二十二
二十三
二十四
二十五
二十六
二十七
二十八
二十九
三十
三十一
三十二
三十三
三十四
三十五
三十六
三十七
三十八
三十九
四十
四十一
四十二
四十三
四十四
四十五
四十六
四十七
四十八
四十九
五十
五十一
五十二
五十三
五十四
五十五
五十六
五十七
五十八
五十九
六十
六十一
六十二
六十三
六十四
六十五
六十六
六十七
六十八
六十九
七十
七十一
七十二
七十三
七十四
七十五
七十六
七十七
七十八
七十九
八十
八十一
八十二
八十三
八十四
八十五
八十六
八十七
八十八
八十九
九十
九十一
九十二
九十三
九十四
九十五
九十六
九十七
九十八
九十九
一百
一百零一
一百零二
一百零三
一百零四
一百零五
一百零六
一百零七
一百零八
一百零九
一百一十
一百一十一
一百一十二
一百一十三
一百一十四
一百一十五
一百一十六
一百一十七
一百一十八
一百一十九
一百二十
一百二十一
一百二十二
一百二十三
一百二十四
一百二十五
一百二十六
一百二十七
一百二十八
一百二十九
一百三十
一百三十一
一百三十二
一百三十三
一百三十四
一百三十五
一百三十六
一百三十七
一百三十八
一百三十九
一百四十
一百四十一
一百四十二
一百四十三
一百四十四
一百四十五
一百四十六
一百四十七
一百四十八
一百四十九
一百五十
一百五十一
一百五十二
一百五十三
一百五十四
一百五十五
一百五十六
一百五十七
一百五十八
一百五十九
一百六十
一百六十一
一百六十二
一百六十三
一百六十四
一百六十五
一百六十六
一百六十七
一百六十八
一百六十九
一百七十
一百七十一
一百七十二
一百七十三
一百七十四
一百七十五
一百七十六
一百七十七
一百七十八
一百七十九
一百八十
一百八十一
一百八十二
一百八十三
一百八十四
一百八十五
一百八十六
一百八十七
一百八十八
一百八十九
一百九十
一百九十一
一百九十二
一百九十三
一百九十四
一百九十五
一百九十六
一百九十七
一百九十八
一百九十九
二百
[Finished in 0.0s]

 

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Are you human? Click the Banana...