前言
敲完工作代碼载碌,遇到個(gè)群里有人問(wèn)有沒有好的123456789轉(zhuǎn)一億二千三百四十五萬(wàn)六千七百八十九的方法僻弹。正好拿來(lái)放松下莹痢。
先去網(wǎng)上找了有沒有相關(guān)的資料疲陕,找到一個(gè)比較好的思路:
var n = 123456789
var zh = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
[...String(n)].map(item => zh[parseInt(item, 10)]).join(''); // 就能獲得一二三四五六七八九
正文代碼
// 不支持012100012這種錯(cuò)誤格式判斷
function arabicToChinese(n, type = 'zh') {
n = typeof(n) == 'string'? parseInt(n, 10): n;
let zhArr, zhUnit;
// 增加一個(gè)繁簡(jiǎn)判斷
if (type = 'zh') {
zhArr = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
zhUnit = ['', '十', '百', '千', '萬(wàn)', '億', '萬(wàn)億', '億億'];
} else if(type = 'zhtw') {
zhArr = ['零', '壹', '貳', '叁', '肆', '伍', '陸', '柒', '捌', '玖'];
zhUnit = ['', '拾', '佰', '仟', '萬(wàn)', '億','萬(wàn)億', '億億'];
}
// result是輸出結(jié)果房午,unitPos是循環(huán)中當(dāng)前排到的位置矿辽,wan、yi、wanyi都是單位是否添加的標(biāo)志
let result = '', unitPos = 0, wan = false, yi = false, wanyi = false;
while(n>0) {
// %為取模袋倔,n除以10最后的余數(shù)雕蔽,此法為獲取n的最后一位,因?yàn)楹竺鏁?huì)對(duì)n進(jìn)行n=Math.floor(n/10)的位數(shù)縮減
// 所以此法循環(huán)可有效獲取n的每一位數(shù)值
let y = n % 10;
if (y === 0) {
// 阿拉伯?dāng)?shù)字12356789轉(zhuǎn)對(duì)應(yīng)中文
// 如果是零的話宾娜,就不會(huì)涉及到單位
result = zhArr[y] + result;
} else {
// 阿拉伯?dāng)?shù)字12356789轉(zhuǎn)對(duì)應(yīng)中文
// 非零的話批狐,會(huì)涉及到單位
// 0-4位需取十百千,5-8位只需取一次單位萬(wàn)前塔,9-12位只需取一次單位億
if(unitPos>=0 && unitPos <4){
result = zhArr[y] + zhUnit[unitPos] + result;
} else if (unitPos>=4 && unitPos <8) {
if (!wan) {
wan = true;
result = zhArr[y] + zhUnit[unitPos-4] + zhUnit[4] + result ;
} else {
result = zhArr[y] + zhUnit[unitPos-4] + result;
}
} else if (unitPos >= 8 && unitPos <12) {
if (!yi) {
yi = true;
result = zhArr[y] + zhUnit[unitPos-8] + zhUnit[5] + result;
} else {
result = zhArr[y] + zhUnit[unitPos-8] + result;
}
} else if (unitPos >= 12 && unitPos < 16) {
if (!wanyi) {
wanyi = true;
result = zhArr[y] + zhUnit[unitPos-12] + zhUnit[6] + result;
} else {
result = zhArr[y] + zhUnit[unitPos-12] + result;
}
}
}
unitPos++;
n = Math.floor(n / 10);
}
// 處理多個(gè)零的情況嚣艇,變成一個(gè)零
result = result.replace(/\零{2,}/g, '零');
// 處理最后一位為零的情況
if (result.endsWith('零')) {
result = result.substr(0, result.length-1)
}
return result;
}