我正在尝试使用十进制到十六进制转换器而不使用Number.prototype.toString
(这是一个不允许该功能的赋值)。我试图使用递归来尝试工作。如果有任何意义,那么一切都会在主else
内的else
内有效。当我为255以上的任何数字运行它时,它给出了我的错误(即任何以十六进制表示的数字超过2位的数字)。有谁知道为什么会这样?
var number = parseInt(prompt("Give me a number and I will turn it into hexadecimal!"));
var digit = 1;
var hexConverter = function () {
if (digit === 1) {
if (Math.floor(number / 16) === 0) {
console.log(hexDigits[number]);
} else {
digit = 16;
console.log(hexConverter(), hexDigits[number % 16]);
}
} else {
if (Math.floor(number / (digit * 16)) === 0) {
return (hexDigits[Math.floor(number / digit)]);
} else {
return (hexConverter(), hexDigits[number % (digit * 16)]);
}
digit = digit * 16;
}
};
hexConverter();
答案 0 :(得分:0)
您在进行递归调用后正在更改digit
,因此它将停留在16并且永远不会达到增加它的位置。
将digit = digit*16;
移至递归调用之前,就像在第一部分中有digit = 16
一样。
答案 1 :(得分:0)
function toHex(x) {
var res='',h;
while (x) {
res=(((h=x&15)<10)? h : String.fromCharCode(55+h)) + res;
x>>=4;
}
return res;
}
工作得很好。
问你:为什么只有'相当'? : - )