local zhChar = {'一','二','三','四','五','六','七','八','九'}
return num .. 'is not a num'
end
local numStr = tostring(num)
local len = string.len(numStr)
local str = ''
local has0 = false
for i = 1, len do
local n = tonumber(string.sub(numStr,i,i))
local p = len - i + 1
if n > 0 and has0 == true then --连续多个零只显示一个
str = str .. '零'
has0 = false
end
if p % 4 == 2 and n == 1 then --十位数如果是首位则不显示一十这样的
if len > p then
str = str .. zhChar[n]
end
str = str .. places[p]
elseif n > 0 then
str = str .. zhChar[n]
str = str .. places[p]
elseif n == 0 then
if p % 4 == 1 then --各位是零则补单位
str = str .. places[p]
else
has0 = true
end
end
end
return str
end
local places = {'','十','百','千','万','十','百','千','亿','十','百','千','万'}
function formatNumber( num )
if type(num) ~= 'number' thenreturn num .. 'is not a num'
end
local numStr = tostring(num)
local len = string.len(numStr)
local str = ''
local has0 = false
for i = 1, len do
local n = tonumber(string.sub(numStr,i,i))
local p = len - i + 1
if n > 0 and has0 == true then --连续多个零只显示一个
str = str .. '零'
has0 = false
end
if p % 4 == 2 and n == 1 then --十位数如果是首位则不显示一十这样的
if len > p then
str = str .. zhChar[n]
end
str = str .. places[p]
elseif n > 0 then
str = str .. zhChar[n]
str = str .. places[p]
elseif n == 0 then
if p % 4 == 1 then --各位是零则补单位
str = str .. places[p]
else
has0 = true
end
end
end
return str
end
测试一下:
print(formatNumber(123456789111))
输出:一千二百三十四亿五千六百七十八万九千一百一十一
要精确到多少位,则在places 数组后补充。
places 数组还可以进行优化,请大神指点是否需要