项目场景:
实现整数转罗马数字
问题描述
出现了NAN或者undefined的现象
前提:声明了多个数组
var thousands = ['','M','MM','MMM'];
var hundreds = ['','C','CC','CCC','CD','D','DC','DCC','DCCC','CM'];
var tens = ['','X','XX','XXX','XL','L','LX','LXX','LXXX','XC'];
var ones = ['','I','II','III','IV','V','VI','VII','VIII','IX'];
错误代码:
else if(num.length == 3){
return hundreds[num % 1000 / 100]+tens[num % 100 / 10]+ones[num%10]
}
原因分析:
‘/’,默认取整了,发现会得到小数。
解决方案:
使用Math.floor()
math函数库中的一个函数,Math.floor(x)返回小于参数x的最大整数,即对浮点数向下取整。
/**
* @param {number} num
* @return {string}
*/
var intToRoman = function(num) {
var thousands = ['','M','MM','MMM'];
var hundreds = ['','C','CC','CCC','CD','D','DC','DCC','DCCC','CM'];
var tens = ['','X','XX','XXX','XL','L','LX','LXX','LXXX','XC'];
var ones = ['','I','II','III','IV','V','VI','VII','VIII','IX'];
num = num.toString();
if( num.length == 1){
return ones[num%10];
}else if(num.length == 2){
return tens[Math.floor(num % 100 / 10)]+ones[num%10]
}else if(num.length == 3){
var h = hundreds[Math.floor(num / 100)];
var t = tens[Math.floor(num % 100 / 10)];
var o = ones[num%10];
return h + t + o;
}else{
return thousands[Math.floor(num / 1000)]+hundreds[Math.floor(num % 1000 / 100)]+tens[Math.floor(num % 100 / 10)]+ones[num%10]
}
};