bob体育官方平台
Javascript(四) 转换数字

要对表单中填写的日期格式进行客户端验证,于是在网上找了段代码,其中用到parseInt对年月日做判断,其中有类似这样的语句: ...... else if<1 || parseInt ...... 可是对于当前本来正确的日期,这里怎么也通不过。后来一查才明白,parseInt实际上有两个参数,第一个是要转换的值,第二个是指定的进制。如果不指定第二个参数,那么它只能正确地转换01到07,从08开始,它就会按照“0开头的是八进制数”的规则转换了!正好现在是9月,我随手选的日期,正好暴露了这个问题,我要是在上半年做这个,还真是将留下一个BUG,然后等到下半年客户才告诉我日期无法填写了。 于是,将函数中所有用到parseInt的地方,都加上了第二个参数,指明是十进制。比如上面那句,改成: ...... else if<1 || parseInt ...... 前面好几次遇到JavaScript中parseInt函数把字串转为数字,前面遇到过几次问题,然后就换其它方法进行比较。 当我去页面取得一个日历的东西,然后进行转换成数字进行比较 的时候,月份转换老是出现问题, 当我用 var num = parseInt; var num = parseInt; ... var num = parseInt; var num = parseInt; var num = parseInt; var num = parseInt; 假如当我进行如上转换的时候, parseInt(),传进去的参数从1到7都没有问题,可是当我用parseInt的时候就出问题,转换出来的num=0 当时因为项目的紧急的原因,也没有细细的去追究 现在有空了看了一下parseInt这个javascript方法 javascript 的api的说明如下: parseInt 方法 返回由字符串转换得到的整数。 parseInt 参数 numString 必选项。要转换为数字的字符串。 radix 可选项。在 2 和 36 之间的表示 numString 所保存数字的进制的值。如果没有提供,则前缀为 '0x' 的字符串被当作十六进制,前缀为 '0' 的字符串被当作八进制。所有其它字符串都被当作是十进制的。 看了如上的api知道了,原来我转进去的参数为01到08时,参数以'0'开头,所以转换成了八进制。又因为八进制是只能表示0到7所以,当我参数为01到07时转换正确,当为08时就进位了,转换为0.而parseInt又能正解转换为10 所以规矩的做法是不要省略最后一个参数, 用parseInt;就能转换正确了

    ECMAScript提供了两种把非数字的原始值转换成数字的方法 parseInt() 转换成整数, parseFloat() 转换成浮点数 只有对String类型调用这些方法,他们才能正确的运行,对其他类型都是返回NaN 
    parseInt(numString, [radix]) 方法 返回由字符串转换得到的整数。 
    参数 numString 必选项。要转换为数字的字符串。 
    radix 可选项。在 2 和 36 之间的表示 numString 所保存数字的进制的值。如果没有提供,则前缀为 '0x' 的字符串被当作十六进制,前缀为 '0' 的字符串被当作八进制。所有其它字符串都被当作是十进制的。

图片 1            var iNum1 = parseInt("123abc"); // returns 123;
图片 2            var iNum2 = parseInt("0xA"); //returns 10; 16进制
图片 3            var iNum3 = parseInt("017"); //returns 15; 8进制
图片 4            var iNum4 = parseInt("blue");  //returns NaN                                
图片 5            
图片 6            var iNum1 = parseInt("11",2); // returns 3;
图片 7            var iNum2 = parseInt("11",8); //returns 9;
图片 8            var iNum3 = parseInt("AF",16); //return 175;
图片 9            

    如果10进制数包含前导0,那么最好采用基数10,这样才不会以外的得到8进制的数

返回顶部