lua 阿拉伯数字转大写(二)
2019-08-21 本文已影响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