我正在编写一个将数字转换为罗马数字的脚本。由于某种原因,当我使用 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');
最佳答案
您的函数中需要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;
}
关于javascript - JS 数字转罗马数字脚本中出现 NaN 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26172795/