项目开发人力真是紧张,搞得鄙都要来写写js. 现在学现卖
。
当用到字符串转为整型的时候,问题来了,如下
var k = parseInt("0041666987"); // k == 17334;
此时k并不是我想的0041666987,而是17334,真神奇
。
再打 parseInt("00416668")、parseInt("0041666823")等等 都是17334。 ???
原来js解析时把 在parseInt没有的指定数值基数时会自动判断第一个参数,发现它以0开头的认为他是一个8进制数,并从左到右一个字符一个字符的判断,当发现某些字符为非法的(单位在进制中非法)就舍弃后面所有位, 如parseInt("001")==1, parseInt("0018")==1, 所以就会出现上的 17334.
parseFloat
parseFloat解析的过程是也从参数str的第一个字符开始解析,如果第一个为非数字,返回NaN;如果为数字,继续解析,直到遇到非数字或解析完,并返回解析的数字。跟parseInt差不多,不同的它没有基数这个概念,默认都应该是认为是10进制。所以在parseFloat(0041666987)的情况它可以正常返回0041666987。
结论,当使用parseInt时, 在不明确第一个输入参数情况下,最好是指定基数,如parseInt("0041666987", 10) == 41666987。
阅读(596) | 评论(0) | 转发(0) |