js数字类型转换parseInt与parseFloat

javascript中的parseInt与parseFloat都是用来将字符串类型转换为数字类型。虽然这样的函数每天都会使用到,但是还是有必要讲一下,也许稍有不慎就会产生不一样的结果。

 parseInt(string,radix)函数用来将字符串类型数据转换为整型。其中的string表示将要转换的数据,radix代表基数(用来表示要转换数据的进制数)。通常函数会先检查传过来的数据是否为string类型,如果不是就转换为string类型的。接着查看数据是否以数字类型开头(或者空字符串会忽略),如果不是以数字开头直接转换失败输出NaN。

例1:

parseInt(" 12")-->12(这里忽略了开头的空字符串)

parseInt("12")-->12(正常数据)

parseInt("a12")-->NaN(不是数字开头转换失败)

如果找到了以数字开头然后开始会匹配接下来的字符,直到找到不是数字的字符结束,然后输出匹配到的数字。这里还是有例外的如果以字符"0开头"是作为八进制来计算,即01-->1,07-->7,08-->0(因为八进制中其实不会有8所以还是输出0),以"0x"或"0X"开头则作为16进制来计算,即0x1-->1,0xa-->10,0xf-->15,0xg-->NaN。

例2:

parseInt(" 123A6")-->123(去掉后面的A6,值匹配到123)

parseInt("123.1")-->123

parseInt("123.A")-->123

parseInt("07")-->7(八进制计算)

parseInt("012")--10(八进制计算)

parseInt("0x1")-->1(十六进制计算)

parseInt("0xg")-->NaN(十六进制转换失败)

下面来看一下带基数的parseInt(string,radix)。带基数的parseInt将string按照radix指定的进制来计算。radix取值为2-36如果不是2-36则输出NaN,0等同于没有加基数参数

例3:

parseInt("11",8)-->9(将"11"作为8进制来表示)

parseInt("039",8)-->3(9转换为8进制不成功所以按照03转换)

parseInt("a",8)-->NaN(转换失败)

parseInt("1.9",8)-->1

parseInt("11",16)-->b

parseInt(".12",16)-->NaN

parseInt("0.12",16)-->0

讲解完parseInt再来讲parseFloat

praseFloat(string)只有一个参数即要转换成浮点型的字符串,基本上跟parseInt类似,即找到以数字开头的第一个整形或浮点型数据,如果没有则输出NaN,如"a0",如果匹配到则输出匹配到的数据,如"12.34a"-->12.34,其他不多讲且看例子

例4:

parseFloat(" 0.01")-->0.01

parseFloat("0.01")-->0.01

parseFloat("123")-->123

parseFloat("123a")-->123

parseFloat("123.01a")-->123.01

parseFloat("123.123.123")-->123.123

parseFloat("a123")-->NaN

 

附加:parseInt不认识科学计数法,parseFloat认识,所以会产生如下

parseInt(0.0000001)-->1(因为0.0000001被转换成字符串时变成"1e-7",所以变成parseInt("1e-7"))

parseInt("0.0000001")-->0(因为"0.0000001"已经是字符串不存在转换)

parseInt(1000000)-->1000000

parseInt("1e6")-->1

parseFloat(0.0000001)-->0.0000001(0.0000001转换成字符串变为"1e-7",所以变为parseFloat("1e-7")-->0.0000001,不要试图alert那样你只会看到"1e-7")

parseFloat("0.0000001")--> 0.0000001(不要试图alert 那样只会看到"1e-7",因为0.0000001转换成字符串时会变成"1e-7"的)

parseFloat("1000000")-->1000000

parseFloat("1e6")-->1000000

 

 

 


 

posted @ 2011-02-23 14:31  自由小菜园  阅读(1070)  评论(0)    收藏  举报