JavaScript實(shí)現(xiàn)阿拉伯?dāng)?shù)字和中文數(shù)字互相轉(zhuǎn)換
阿拉伯?dāng)?shù)字轉(zhuǎn)中文數(shù)字
中文數(shù)字的特點(diǎn):
- 每個(gè)計(jì)數(shù)數(shù)字都跟著一個(gè)權(quán)位,權(quán)位有:十、百、千、萬(wàn)、億。
- 以“萬(wàn)”為小節(jié),對(duì)應(yīng)一個(gè)節(jié)權(quán)位,萬(wàn)以下沒(méi)有節(jié)權(quán)位。
- 每個(gè)小節(jié)內(nèi)部以“十百千”為權(quán)位獨(dú)立計(jì)數(shù)。
- “十百千”不能連續(xù)出現(xiàn),而“萬(wàn)”和“億”作為節(jié)權(quán)位時(shí)可以和其他權(quán)位連用,如:“二十億”。
中文數(shù)字對(duì)“零”的使用要滿足以下三條規(guī)則:
- 以10000為小節(jié),小節(jié)的結(jié)尾即使是0,也不使用零。
- 小節(jié)內(nèi)兩個(gè)非0數(shù)字之間要使用“零”。
- 當(dāng)小節(jié)的“千”位是0時(shí)(即:1~999),只要不是首小節(jié),都要補(bǔ)“零”。
算法設(shè)計(jì)的一些說(shuō)明:
- 對(duì)“零”的第三個(gè)規(guī)則,把檢測(cè)放在循環(huán)的最前面并默認(rèn)為false,可以自然的丟棄最高小節(jié)的加零判斷。
- 單個(gè)數(shù)字轉(zhuǎn)換用數(shù)組實(shí)現(xiàn),var chnNumChar = ["零","一","二","三","四","五","六","七","八","九"];
- 節(jié)權(quán)位同樣用數(shù)組實(shí)現(xiàn),var chnUnitSection = ["","萬(wàn)","億","萬(wàn)億","億億"];
- 節(jié)內(nèi)權(quán)位同樣用數(shù)組實(shí)現(xiàn),var chnUnitChar = ["","十","百","千"];
節(jié)內(nèi)轉(zhuǎn)換算法:
function SectionToChinese(section){ var strIns = '', chnStr = ''; var unitPos = 0; var zero = true; while(section > 0){ var v = section % 10; if(v === 0){ if(!zero){ zero = true; chnStr = chnNumChar[v] + chnStr; } }else{ zero = false; strIns = chnNumChar[v]; strIns += chnUnitChar[unitPos]; chnStr = strIns + chnStr; } unitPos++; section = Math.floor(section / 10); } return chnStr; }
轉(zhuǎn)換算法主函數(shù):
function NumberToChinese(num){ var unitPos = 0; var strIns = '', chnStr = ''; var needZero = false; if(num === 0){ return chnNumChar[0]; } while(num > 0){ var section = num % 10000; if(needZero){ chnStr = chnNumChar[0] + chnStr; } strIns = SectionToChinese(section); strIns += (section !== 0) ? chnUnitSection[unitPos] : chnUnitSection[0]; chnStr = strIns + chnStr; needZero = (section < 1000) && (section > 0); num = Math.floor(num / 10000); unitPos++; } return chnStr; }
中文數(shù)字轉(zhuǎn)阿拉伯?dāng)?shù)字
設(shè)計(jì)思想:
- 將中文數(shù)學(xué)轉(zhuǎn)換成阿拉伯?dāng)?shù)字。
- 將中文權(quán)位轉(zhuǎn)換成10的位數(shù)。
- 對(duì)每個(gè)權(quán)位依次轉(zhuǎn)換成位數(shù)并求和。
- 零直接忽略即可。
中文數(shù)字轉(zhuǎn)換成阿拉伯?dāng)?shù)字用如下對(duì)象實(shí)現(xiàn):
var chnNumChar = { 零:0, 一:1, 二:2, 三:3, 四:4, 五:5, 六:6, 七:7, 八:8, 九:9 };
中文權(quán)位轉(zhuǎn)換成10的位數(shù)及節(jié)權(quán)標(biāo)志用如下對(duì)象實(shí)現(xiàn):
var chnNameValue = { 十:{value:10, secUnit:false}, 百:{value:100, secUnit:false}, 千:{value:1000, secUnit:false}, 萬(wàn):{value:10000, secUnit:true}, 億:{value:100000000, secUnit:true} }
轉(zhuǎn)換算法如下:
function ChineseToNumber(chnStr){ var rtn = 0; var section = 0; var number = 0; var secUnit = false; var str = chnStr.split(''); for(var i = 0; i < str.length; i++){ var num = chnNumChar[str[i]]; if(typeof num !== 'undefined'){ number = num; if(i === str.length - 1){ section += number; } }else{ var unit = chnNameValue[str[i]].value; secUnit = chnNameValue[str[i]].secUnit; if(secUnit){ section = (section + number) * unit; rtn += section; section = 0; }else{ section += (number * unit); } number = 0; } } return rtn + section; }
相關(guān)文章
基于JavaScript實(shí)現(xiàn)十五拼圖代碼實(shí)例
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)十五拼圖代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04我遇到的參數(shù)傳遞中 雙引號(hào)單引號(hào)嵌套問(wèn)題
我遇到的參數(shù)傳遞中 雙引號(hào)單引號(hào)嵌套問(wèn)題2010-02-02從javascript語(yǔ)言本身談項(xiàng)目實(shí)戰(zhàn)
從javascript語(yǔ)言本身談項(xiàng)目實(shí)戰(zhàn)...2006-12-12深入了解JavaScript的邏輯運(yùn)算符(與、或)
本篇文章分享的是 JS 當(dāng)中的邏輯運(yùn)算符與、或,也就是 && 、 || ,沒(méi)錯(cuò),別看這簡(jiǎn)簡(jiǎn)單單的幾個(gè)運(yùn)算符,雖然這是最基礎(chǔ)的知識(shí),但其中隱藏的奧秘卻十分耐人尋味,接下來(lái)本文就為大家一一揭開(kāi)這簡(jiǎn)單的運(yùn)算符背后的奇妙之處。2016-12-12JavaScript實(shí)現(xiàn)淘寶購(gòu)物件數(shù)選擇
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)淘寶購(gòu)物件數(shù)的選擇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08js中利用cookie實(shí)現(xiàn)記住密碼功能
這篇文章主要為大家詳細(xì)介紹了js中利用cookie實(shí)現(xiàn)記住密碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10