面向互联网编程
近期项目中遇到中文金额计算问题,本着面向互联网编程,一番搜索下来,找到几篇文章:
注:排名不分先后,完全根据个人浏览习惯
功能实现肯定都没问题,可是看着好累,肯定有朋友说:嫌弃别人的代码,要不你来一发?
好的 !-_-!
聊聊思路
首先 看几个常规的中文金额写法:
- 贰拾玖万捌仟
- 捌拾伍万捌仟元
- 叁拾万元
- 玖元肆角伍分
- 贰佰零肆万
从样例可以看出,中文金额由两部分组成: 数值+单位 ,正是因为 单位 的参与让转换变得复杂了,不然直接搞一个 对应表 分分钟就能完成转换,另一种就是按上面几篇文章里面写的:识别数值位 和该数值位的单位,再按位 数值x单位 进行 相加得到 转换数,嗯 是个方法,有没有其他方法?
再来看看大写数的组成:1
2
3
4
5##单位
'仟', '佰','拾','兆','仟','佰','拾','亿','仟','佰','拾','万','仟','佰','拾','元','角','分'
##数值
'零', '壹' , '贰' , '叁' , '肆' , '伍' , '陆' , '柒' , '捌' , '玖'
仔细观察可以发现,如果把满 单位 的数作为模板,是否可以简化转换? 答案是肯定的
代码实现 (js版本)
1 | var chinese_money='贰佰零伍万玖仟陆佰捌拾伍'; |
后记
整个实现只考虑转化,未做输入合法性控制,代码未使用数值计算,实现的时间复杂度基本固定,好不好用只能看疗效了-_-