美文网首页
lua 阿拉伯数字转大写(二)

lua 阿拉伯数字转大写(二)

作者: 菜鸟的笔记 | 来源:发表于2019-08-21 16:31 被阅读0次
--此方法转换后带有单位
function  numberToString(digit)
    ---阿拉伯数字转中文大写
    local wordDigit = ""
    local digitLength = 0
    local iNum = 0
    local iAddZero = 0
    local digitUnit = {"", "十", "百", "千", "万", "十", "百", "千", "亿","十", "百", "千", "万", "十", "百", "千"}
    local wordFigure = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}
    if nil == tonumber(digit) then
        return tostring(digit)
    end
    digitLength =string.len(digit)
    if digitLength > 10 or digitLength == 0 or tonumber(digit) < 0 then
        return tostring(digit)
    end
    for i = 1, digitLength  do
        iNum = string.sub(digit,i,i)
        if iNum == 0 and i ~= digitLength then
            iAddZero = iAddZero + 1
        else
            if iAddZero > 0 then
            wordDigit = wordDigit..wordFigure[1]
        end
            wordDigit = wordDigit..wordFigure[iNum + 1] --//转换为相应的数字
            iAddZero = 0
        end
        if (iAddZero < 4) and (0 == (digitLength - i) % 4 or 0 ~= tonumber(iNum)) then
            wordDigit = wordDigit..digitUnit[digitLength-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
            digit = string.sub(num,i-2,i)
            if digit == wordFigure[1] then
                zero_num = zero_num + 1
            else
                break
            end
        end
        num = string.sub(num, 1,szLen - zero_num * 3)
        digit = string.sub(num, 1,6)
        --- 开头的 "一十" 转成 "十" , 贴近人的读法
        if digit == wordFigure[2]..digitUnit[2] then
            num = string.sub(num, 4, string.len(num))
        end
        return num
    end
    return removeZero(wordDigit)
end

相关文章

网友评论

      本文标题:lua 阿拉伯数字转大写(二)

      本文链接:https://www.haomeiwen.com/subject/awrisctx.html