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

浙公网安备 33010602011771号