2014-10-03 1 views
0

숫자를 로마 숫자로 변환하는 스크립트 작업을하고 있습니다. 어떤 이유로 2 자리 숫자로 작업 할 때 예상 한 결과 대신 NaN이 반환됩니다. 2 자리 숫자는 하위 문자열을 사용하여 분할되어 현재 숫자로 변환되지 않지만 Number() 또는 parseInt()를 사용하여 문자열을 숫자로 변환하더라도 NaN이 중지되지 않습니다. 나는 틀린 일을해야만한다. 누군가 제발 도와주세요. 코드는 여기에서 찾을 수 있습니다 :JS 번호에서 로마 숫자 스크립트로 NaN 오류가 발생했습니다.

http://jsfiddle.net/q9Lkrjhu/

function answer(line){ 
    var roman; 
    if(line.length == 1){ 
     singleDigit(line); 
    }else if(line.length == 2){ 
     var firstDigit = line.substr(0,1); 
     var secondDigit = line.substr(1,2); 
     roman = twoDigit(firstDigit); 
     roman += singleDigit(secondDigit); 
    }else if(line.length == 3){ 

    }else if(line.length == 4){ 

} 

function singleDigit(line){ 
    if(line == '4'){ 
     roman = 'IV'; 
    }else if(line == '9'){ 
     roman = 'IX'; 
    }else{ 
     if (line/5 >= 1){ 
      roman = 'V'; 
      var singles = ones(line - 5, 'I'); 
      roman += singles; 
     }else{ 
      roman = ones(line, 'I'); 
     } 
    } 
} 

function ones(num, char){ 
    var romOnes =''; 
    for(var i=0; i<num;i++){ 
      romOnes += char; 
    } 
    return romOnes; 
} 

function twoDigit(line){ 
    if(line == '4'){ 
     roman = 'XL'; 
    }else if(line == '9'){ 
     roman = 'XC'; 
    }else{ 
     if (line/5 >= 1){ 
      roman = 'L'; 
      var singles = ones(line - 5, 'X'); 
      roman += singles; 
     }else{ 
      roman = ones(line, 'X'); 
     } 
    } 
} 

    alert(roman); 
} 
answer('42'); 

답변

4

당신은 당신의 기능에 return 문이 필요합니다

function singleDigit(line){ 
    var roman; 
    if(line == '4'){ 
     roman = 'IV'; 
    }else if(line == '9'){ 
     roman = 'IX'; 
    }else{ 
     if (line/5 >= 1){ 
      roman = 'V'; 
      var singles = ones(line - 5, 'I'); 
      roman += singles; 
     }else{ 
      roman = ones(line, 'I'); 
     } 
    } 
    return roman; 
} 

function twoDigit(line){ 
    var roman; 
    if(line == '4'){ 
     roman = 'XL'; 
    }else if(line == '9'){ 
     roman = 'XC'; 
    }else{ 
     if (line/5 >= 1){ 
      roman = 'L'; 
      var singles = ones(line - 5, 'X'); 
      roman += singles; 
     }else{ 
      roman = ones(line, 'X'); 
     } 
    } 
    return roman; 
} 
+0

를 참조하십시오. 나는 그것이 단순해야만한다는 것을 알았다. 감사! –

0

귀하의 기능 singleDigit 및 twoDigit는 아무 것도 반환하지 않습니다. 이 기능의 끝에 return roman;을 추가하십시오. 오류가 있습니다

+0

* roman * 또한 각 함수 내에서 선언되어야합니다. – RobG

관련 문제