[as3]int()、Number()、parseFloat()、parseInt()与uint()
int()、Number()、parseFloat()、parseInt()与uint()目的都是要生成一个数字,除参数不同、目的不同外,还有一些细微的差别需要注意。
int(),期望的参数类型是Number,调用int()函数后,参数如果是小数,将被从小数点处断开,只保留整数部分,跟Math.floor()作用差不多。比如:
- var testInt:Number = 6.7;
- trace("source Number is", testInt, "after call int()", int(testInt));
输出结果是
- source Number is 6.7 after call int() 6
从上面的例子中可以看到,虽然小数第一位是7,但仍然被舍去了。
虽然期望的参数类型是Number,但是传递一个有效的数字字符串的时候也是可以的,比如:
- trace("int(6.7) =",int("6.7"));
- trace("int(06.7) =",int("06.7"));
- trace("int(0x15) =",int("0x15"));
输出结果是:
- int(6.7) = 6
- int(06.7) = 6
- int(0x15) = 21
第一行的例子说明有效的字符串是可以的。
第二行的例子说明前面的0将被忽略掉(如果前面有空格的话也会被忽略掉)
第三行说明16进制正数也可以被处理(16进制小数不可以)
Number(),这个大家比较熟悉了,它就是要把参数转换成一个数字。如下:
- trace("Number(6.3) =", Number(6.3));
- trace("Number('6.3') =", Number("6.3"));
- trace("Number('6.3a') =", Number('6.3a'));
- trace("Number('0x15') =", Number('0x15'));
- trace("Number('015') =", Number('015'));
输出结果如下:
- Number(6.3) = 6.3
- Number('6.3') = 6.3
- Number('6.3a') = NaN
- Number('0x15') = 21
- Number('015') = 15
第一行有效的数字转换后跟我们预测的一样
第二行有效的字符串也可以顺利被处理
第三行如果含有不是数字的字符,将返回NaN
第四行十六进制整数可以被顺利处理
第五行0开头的不会被按照八进制转换,而是会被忽略
parseFloat(),期望的参数是字符串,它将把参数指定的字符串转换成浮点小数并返回。有一点需要注意:它会一直处理参数字符串直到遇到不是数字的字符结束。如下:
- trace("parseFloat('6.8') =", parseFloat('6.8'))
- trace("parseFloat('6.8a') =", parseFloat('6.8a'))
- trace("parseFloat('06.8') =", parseFloat('06.8'))
- trace("parseFloat(' 6.8') =", parseFloat(' 6.8'))
- trace("parseFloat(' a') =", parseFloat(' a'))
- //trace("parseFloat(6.8) =", parseFloat(6.8))
- trace("parseFloat('0x15') =", parseFloat('0x15'))
输出结果是:
- parseFloat('6.8') = 6.8
- parseFloat('6.8a') = 6.8
- parseFloat('06.8') = 6.8
- parseFloat(' 6.8') = 6.8
- parseFloat(' a') = NaN
- parseFloat('0x15') = 0
第一行可以看到有效的字符串顺利转换
第二行可以看到它会一直处理到字符a结束,并且把字符a前面的当作数字返回。这一点同int()、Number()都不同
第三行说明开头的0会被忽略
第四行说明开头的空格会被忽略
第五行说明不是有效数字字符的会返回NaN
第六行被我注释掉了,因为它不能编译通过,说明不能以数字作为参数
第七行说明它不能处理16进制字符。
parseInt(),它是要把字符串转换成整数。可以接收两个参数,第一个指定要转换的字符串,第二个指定基数,默认为0。如果第一个参数不能被转换成数字,则返回NaN;如果它以0x开头,则按照16进制转换;与以往版本的ActionScript不同的是,以0开头的字符串不会按照8进制转换,而是要指定第二个参数为8才可以。开头的0和空格会被忽略。如下:
- trace("parseInt('6.8') =", parseInt('6.8'))
- trace("parseInt('6.8a') =", parseInt('6.8a'))
- trace("parseInt('06.8') =", parseInt('06.8'))
- trace("parseInt(' 6.8') =", parseInt(' 6.8'))
- trace("parseInt(' a') =", parseInt(' a'))
- //trace("parseInt(6.8) =", parseInt(6.8))
- trace("parseInt('0x15') =", parseInt('0x15'))
- trace("parseInt('15', 8) =", parseInt('15',8))
输出结果是:
- parseInt('6.8') = 6
- parseInt('6.8a') = 6
- parseInt('06.8') = 6
- parseInt(' 6.8') = 6
- parseInt(' a') = NaN
- parseInt('0x15') = 21
- parseInt('15', 8) = 13
第一行说明小数字符串可以转换
第二行说明它会从小数点处断开,不管后面是不是有非数字的字符
第三行说明开头的0被忽略了
第四行说明开头的空格被忽略了
第五行说明无法转换成数字的返回NaN
第六行被屏蔽掉,因为无法编译通过
第七行说明0x开头的按照16进制转换
第八行说明指定基数后可以转换8进制。(基数的范围是2~36)
uint()将给定的数字转换成无符号整数,小数将会从小数点处截断,期望的参数是数字。如下:
- function testUint(arg:Array)
- {
- var len:uint = arg.length;
- for(var i:uint = 0; i < len; i++)
- {
- trace("uint(", arg[i], ") =", uint(arg[i]));
- }
- }
- testUint([undefined, null, 0, NaN, 5.31, -5.78, -5, true,false, "", "5", "5a"])
输出结果是
- uint( undefined ) = 0
- uint( null ) = 0
- uint( 0 ) = 0
- uint( NaN ) = 0
- uint( 5.31 ) = 5
- uint( -5.78 ) = 4294967291
- uint( -5 ) = 4294967291
- uint( true ) = 1
- uint( false ) = 0
- uint( ) = 0
- uint( 5 ) = 5
- uint( 5a ) = 0
第一行undefined值被转换成0
第二行null值被转换成0
第三行0被转换成0
第四行NaN被转换成0
第五行正数被取整(小数部分被舍去)
第六行负小数先取整后按照负整数参数的规则处理
第七行负整数转换后的结果是uint.MAX_VALUE + 负正数
第八行true转换成1
第9行false转换成0
第10行空字符串转换成0
第11行可以转换成数字的字符串被转换成数字
第12行不能转换成数字的字符串被处理为0
OK,现在明白这几个函数各自的功能和细微特征了吧

Leave a Reply