Lua 实现数字转化为中文

local zhChar = {'一','二','三','四','五','六','七','八','九'}

local places = {'','十','百','千','万','十','百','千','亿','十','百','千','万'}

function formatNumber( num )

if  type(num) ~=  'number' then
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


测试一下:

print(formatNumber(123456789111))


输出:一千二百三十四亿五千六百七十八万九千一百一十一


要精确到多少位,则在places 数组后补充。

places 数组还可以进行优化,请大神指点是否需要



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值