我最近创建了一个程序,将二进制数字符串转换为十进制数字。似乎工作正常,直到字符串长度达到大约15位左右,然后它开始关闭大约1或2个位置(即1011010110100101001返回372008而不是372009)。一旦字符串达到大约20位数,它就会返回NaN。关于什么事情发生的任何想法?
function binaryConverter2(num) {
var numString = num.toString(),
total = 0,
i = numString.length-1,
j = 1;
while(i >= 0) {
total += (numString[i] *j);
j = j*2;
i --;
console.log(total);
}
return total;
}
答案 0 :(得分:1)
问题是由JavaScript的浮点数精度引起的。有关详细信息,请参阅How to deal with floating point number precision in JavaScript?。
我已经创建了一个函数的jsbin版本,它表明发生了错误,因为你发送的浮点数大于浮点精度可以准确存储然后将其转换为字符串。如果你考虑1011010110100101001代表的十进制数而不是二进制数,那么你会发现这是一个非常大的数字。
http://jsbin.com/heluyut/1/edit?js,console
console.log(numString);//"1011010110100101000" notice the missing 1 on the right