欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript實(shí)現(xiàn)阿拉伯?dāng)?shù)字和中文數(shù)字互相轉(zhuǎn)換

 更新時(shí)間:2016年06月12日 15:59:58   作者:zhoutk  
JavaScript實(shí)現(xiàn)阿拉伯?dāng)?shù)字和中文數(shù)字互相轉(zhuǎn)換可以用數(shù)組的循環(huán)檢測(cè)后的替換來(lái)實(shí)現(xià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)文章

最新評(píng)論