我正在编写一个将数字转换为罗马数字的脚本。出于某种原因,当我使用2位数字时,我得到的是NaN而不是我期望的结果。 2位数字是使用子字符串分割的,目前还没有被转换为数字,但即使我使用Number()或parseInt()将字符串转换为数字,我也无法停止NaN 。我必须做错事。有人请帮忙。代码可以在这里找到:
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');
答案 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);