我正在尝试使用以下递归函数实现一个相当简单的十进制到二进制转换器:
function dectobin(d) {
if (0 >= d) { return 0; }
else if (1 == d) { return 1; }
else {
return 10 * dectobin(Math.floor(d / 2)) + (d % 2);
}
}
现在的问题是,当我用 70007 测试它时,当最后一个条目从堆栈中弹出时,最后一次递归时似乎出现了 1 的溢出。因此,一旦 dectobin(35003) 返回 100010001011101,它就会按 10 缩放到 1000100010111010,并且假定添加 1。除了,它不是加 1,而是加 2,所以答案变成:1000100010111012。现在我检查了我的逻辑和数学,发现没有错误,所以我有一种感觉,这是导致这种情况的语言的内部结构错误。因此,如果有人能在这里帮助我并向我解释什么是最令人满意的问题。提前致谢。
最佳答案
郑重声明:您可以使用以下方法将十进制转换为二进制(字符串):
(70007).toString(2)
不需要乘以 10。此外,永远不会满足 0 >= d
。
将您的函数重写为:
function dectobin(d) {
function recurse(dd) {
return dd > 1 ? recurse(Math.floor(dd/2))+''+dd%2 : dd;
}
return recurse(d);
}
应该提供正确的结果
关于javascript - 神秘2 出现在我的JavaScript 十进制到二进制转换器的输出中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9578404/