JS编号中的NaN错误为罗马数字脚本

时间:2014-10-03 03:14:55

标签: javascript nan

我正在编写一个将数字转换为罗马数字的脚本。出于某种原因,当我使用2位数字时,我得到的是NaN而不是我期望的结果。 2位数字是使用子字符串分割的,目前还没有被转换为数字,但即使我使用Number()或parseInt()将字符串转换为数字,我也无法停止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');

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

你的函数singleDigit和twoDigit什么都不返回。将return roman;添加到此函数的末尾。

答案 2 :(得分:0)

出现错误,请将警报移动一个,请参阅此

http://jsfiddle.net/q9Lkrjhu/2/

    alert(roman);  // it should be here
}

    alert(roman);