js罗马数字转换

function convert(num) {
 //数级定义
 var roman = {
   1000 : 'M',
   500 : 'D',
   100 : 'C',
   50 : 'L',
   10 : 'X',
   5 : 'V',
   1 : 'I'
 }, res='', i = '', j = 0, p =0, indexes = [], n=0;
  
  for(i in roman){
    indexes.push(i - 0);
  }
  //倒序
  indexes.sort(function(p, n){
    return n - p;
  });
  
  indexes.forEach(function(i){
    p =  num / i;
    if(p < 1 || num == 0) return;
    //k是基数,比如说1~9基数是1,10~99的基数是10,101~999基数是100
    var k = i/((i+"")[0]);
    
    /**
     *罗马数字规则,进9 和 进4 不一样,
     *进9:本级基数 + 是下级数,
     *进4: 本级数 + 下级数
     */
    //进9
    if( ((num + k) / ( i + 5 * k)) >= 1  && indexes.indexOf(i + 5 * k) > -1){
      res += roman[k] + roman[i + 5 * k];
      num -= i + 4 * k;//本级数 + 4倍的基数
    }else{
      n = Math.floor(p);
    
      if(n == 4 && indexes.indexOf(i + k * 4) > -1){//进4
        res += roman[i] + roman[i + k * 4];
      }else{
        for(j = 0; j<n; j++){
          res += roman[i];
        }
      }
      num -= n * i;
    }
  });
 
 return res;
}

convert(9002);
此条目发表在js分类目录。将固定链接加入收藏夹。