2014-10-03 26 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

就是這樣。我知道這一定很簡單。謝謝! – 2014-10-03 03:32:56

0

你的功能singleDigit和twoDigit沒有返回。在此功能的末尾添加return roman;

+0

* roman *也必須在每個函數中聲明。 – RobG 2014-10-03 03:34:03