I Love China

技术·人生

技术服务生活
繁體
5月 27th, 2007

[as3]int()、Number()、parseFloat()、parseInt()与uint()

int()、Number()、parseFloat()、parseInt()与uint()目的都是要生成一个数字,除参数不同、目的不同外,还有一些细微的差别需要注意。
int(),期望的参数类型是Number,调用int()函数后,参数如果是小数,将被从小数点处断开,只保留整数部分,跟Math.floor()作用差不多。比如:

ActionScript Code:
  1. var testInt:Number = 6.7;
  2. trace("source Number is", testInt, "after call int()", int(testInt));

输出结果是

output Code:
  1. source Number is 6.7 after call int() 6

从上面的例子中可以看到,虽然小数第一位是7,但仍然被舍去了。
虽然期望的参数类型是Number,但是传递一个有效的数字字符串的时候也是可以的,比如:

ActionScript Code:
  1. trace("int(6.7) =",int("6.7"));
  2. trace("int(06.7) =",int("06.7"));
  3. trace("int(0x15) =",int("0x15"));

输出结果是:

Output Code:
  1. int(6.7) = 6
  2. int(06.7) = 6
  3. int(0x15) = 21

第一行的例子说明有效的字符串是可以的。
第二行的例子说明前面的0将被忽略掉(如果前面有空格的话也会被忽略掉)
第三行说明16进制正数也可以被处理(16进制小数不可以)
Number(),这个大家比较熟悉了,它就是要把参数转换成一个数字。如下:

ActionScript Code:
  1. trace("Number(6.3) =", Number(6.3));
  2. trace("Number('6.3') =", Number("6.3"));
  3. trace("Number('6.3a') =", Number('6.3a'));
  4. trace("Number('0x15') =", Number('0x15'));
  5. trace("Number('015') =", Number('015'));

输出结果如下:

Output Code:
  1. Number(6.3) = 6.3
  2. Number('6.3') = 6.3
  3. Number('6.3a') = NaN
  4. Number('0x15') = 21
  5. Number('015') = 15

第一行有效的数字转换后跟我们预测的一样
第二行有效的字符串也可以顺利被处理
第三行如果含有不是数字的字符,将返回NaN
第四行十六进制整数可以被顺利处理
第五行0开头的不会被按照八进制转换,而是会被忽略
parseFloat(),期望的参数是字符串,它将把参数指定的字符串转换成浮点小数并返回。有一点需要注意:它会一直处理参数字符串直到遇到不是数字的字符结束。如下:

ActionScript Code:
  1. trace("parseFloat('6.8') =", parseFloat('6.8'))
  2. trace("parseFloat('6.8a') =", parseFloat('6.8a'))
  3. trace("parseFloat('06.8') =", parseFloat('06.8'))
  4. trace("parseFloat(' 6.8') =", parseFloat(' 6.8'))
  5. trace("parseFloat(' a') =", parseFloat(' a'))
  6. //trace("parseFloat(6.8) =", parseFloat(6.8))
  7. trace("parseFloat('0x15') =", parseFloat('0x15'))

输出结果是:

Output Code:
  1. parseFloat('6.8') = 6.8
  2. parseFloat('6.8a') = 6.8
  3. parseFloat('06.8') = 6.8
  4. parseFloat(' 6.8') = 6.8
  5. parseFloat(' a') = NaN
  6. parseFloat('0x15') = 0

第一行可以看到有效的字符串顺利转换
第二行可以看到它会一直处理到字符a结束,并且把字符a前面的当作数字返回。这一点同int()、Number()都不同
第三行说明开头的0会被忽略
第四行说明开头的空格会被忽略
第五行说明不是有效数字字符的会返回NaN
第六行被我注释掉了,因为它不能编译通过,说明不能以数字作为参数
第七行说明它不能处理16进制字符。
parseInt(),它是要把字符串转换成整数。可以接收两个参数,第一个指定要转换的字符串,第二个指定基数,默认为0。如果第一个参数不能被转换成数字,则返回NaN;如果它以0x开头,则按照16进制转换;与以往版本的ActionScript不同的是,以0开头的字符串不会按照8进制转换,而是要指定第二个参数为8才可以。开头的0和空格会被忽略。如下:

ActionScript Code:
  1. trace("parseInt('6.8') =", parseInt('6.8'))
  2. trace("parseInt('6.8a') =", parseInt('6.8a'))
  3. trace("parseInt('06.8') =", parseInt('06.8'))
  4. trace("parseInt(' 6.8') =", parseInt(' 6.8'))
  5. trace("parseInt(' a') =", parseInt(' a'))
  6. //trace("parseInt(6.8) =", parseInt(6.8))
  7. trace("parseInt('0x15') =", parseInt('0x15'))
  8. trace("parseInt('15', 8) =", parseInt('15',8))

输出结果是:

Output Code:
  1. parseInt('6.8') = 6
  2. parseInt('6.8a') = 6
  3. parseInt('06.8') = 6
  4. parseInt(' 6.8') = 6
  5. parseInt(' a') = NaN
  6. parseInt('0x15') = 21
  7. parseInt('15', 8) = 13

第一行说明小数字符串可以转换
第二行说明它会从小数点处断开,不管后面是不是有非数字的字符
第三行说明开头的0被忽略了
第四行说明开头的空格被忽略了
第五行说明无法转换成数字的返回NaN
第六行被屏蔽掉,因为无法编译通过
第七行说明0x开头的按照16进制转换
第八行说明指定基数后可以转换8进制。(基数的范围是2~36)
uint()将给定的数字转换成无符号整数,小数将会从小数点处截断,期望的参数是数字。如下:

ActionScript Code:
  1. function testUint(arg:Array)
  2. {
  3.     var len:uint = arg.length;
  4.     for(var i:uint = 0; i < len; i++)
  5.     {
  6.         trace("uint(", arg[i], ") =", uint(arg[i]));
  7.     }
  8. }
  9. testUint([undefined, null, 0, NaN, 5.31, -5.78, -5, true,false, "", "5", "5a"])

输出结果是

Output Code:
  1. uint( undefined ) = 0
  2. uint( null ) = 0
  3. uint( 0 ) = 0
  4. uint( NaN ) = 0
  5. uint( 5.31 ) = 5
  6. uint( -5.78 ) = 4294967291
  7. uint( -5 ) = 4294967291
  8. uint( true ) = 1
  9. uint( false ) = 0
  10. uint(  ) = 0
  11. uint( 5 ) = 5
  12. 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