为啥parseInt(0.0000008) === 8?

IEEE 754

javascript 的数字系统是采用 IEEE 754,一开始看到这个问题,以为是 IEEE 754 导致的问题。

常见的问题有浮点数比较:

console.log((0.1 + 0.2) == 0.3);  // false
console.log((0.1 + 0.2) === 0.3); // false
console.log(0.1 + 0.2); // 0.30000000000000004

parseInt(string, radix)

parseInt(0.0000008)等于parseInt(String(0.0000008),10)

String(0.000008);  // '0.000008'
String(0.0000008); // '8e-7'

因此

parseInt(String(0.0000008),10)等于parseInt(‘8e-7’,10)===8

结论

不要将 parseInt 当做转换 Number 和 Integer 的工具。

parseInt(1/0, 19);      // 18
parseInt(false, 16);    // 250
parseInt(parseInt, 16); // 15
parseInt("0x10");       // 16
parseInt("10", 2);      // 2

http://blog.csdn.net/Vanhukseter/article/details/43459927