数字转换为中文大写,我相信已经有很多的实现了,特别是一些银行金融系统中,经常会用到大写的人民币金额。
但是,反过来,怎么将这个中文描述的人民币金额转换为数字呢?
这里分享一个我很久之前写的一个转换函数吧!直接上代码哦
实现代码
var map = {
"零":0,
"一":1,
"壹":1,
"二":2,
"贰":2,
"两":2,
"三":3,
"叁":3,
"四":4,
"肆":4,
"五":5,
"伍":5,
"六":6,
"陆":6,
"七":7,
"柒":7,
"八":8,
"捌":8,
"九":9,
"玖":9,
"十":10,
"拾":10,
"百":100,
"佰":100,
"千":1000,
"仟":1000,
"万":10000,
"十万":100000,
"百万":1000000,
"千万":10000000,
"亿":100000000
};
// 解析失败返回-1,成功返回转换后的数字,不支持负数
function chinese_number_to_digit(chinese_number){
var len = chinese_number.length;
if(len == 0) return -1;
if(len == 1) return (map[chinese_number]<=10) ? map[chinese_number] : -1;
// 返回的总和
var summary = 0;
// 十开头省略一的情况 例 `十二` 和 `一十二`
if(map[chinese_number[0]] == 10) {
chinese_number = "一"+chinese_number;
len++;
}
// 单位结尾,省略末尾单位的情况 例 一万二 三千一 二百五
if(len >= 3 && map[chinese_number[len-1]] < 10){
var last_second_num = map[chinese_number[len-2]];
if(last_second_num == 100 || last_second_num == 1000 || last_second_num == 10000 || last_second_num == 100000000){
for(var key in map){
if(map[key] == last_second_num/10){
chinese_number += key;
len += key.length;
break;
}
}
}
}
// 不支持 一亿亿xxx 十亿亿xx ...
if(chinese_number.match(/亿/g) && chinese_number.match(/亿/g).length>1) return -1;
// 处理一亿以上的情况 例 三百二十三亿三千二百万两千零二十二
var splited = chinese_number.split("亿");
if(splited.length == 2){
var rest = splited[1]=="" ? 0 : chinese_number_to_digit(splited[1]);
return summary + chinese_number_to_digit(splited[0])*100000000 + rest;
}
// 下面处理小于一亿的情况 例 三千二百万两千零二十二
splited = chinese_number.split("万");
if(splited.length == 2){
var rest = splited[1]=="" ? 0 : chinese_number_to_digit(splited[1]);
return summary + chinese_number_to_digit(splited[0])*10000 + rest;
}
// 下面处理小于一万的情况 例 两千零二十二
var i = 0;
while (i<len){
var first_char_num = map[chinese_number[i]];
var second_char_num = map[chinese_number[i+1]];
if(second_char_num > 9)
summary+= first_char_num*second_char_num;
i++;
if(i==len)
summary+=first_char_num<=9?first_char_num:0;
}
return summary;
}
实现思路并不难,基本上都是一些字符串处理,再加上分段累计求和就可以做出来了
上面代码还不支持某些繁体字,需要繁体自己在map里面加就行了!
你可以复制上面代码,打开F12粘贴进去,运行试试看,下面上一个我这里的运行结果:
觉得有用,还请点赞收藏!
励志前端,CSDN唯一账号!关注我,带你了解更多前端知识!