近距离涉及数字是数学的主题。没有数学操作,flash影片会变得笨拙。简单的操作象加法和减法是ActionScript程序的基础,更进一步的数学像随机数字和三角函数的计算是先进程序的精华。
ActionScript 3.0三基本数值的类型:number、int和uint。number是任何的浮点数字,而int和uint是整数。int和uint之间的区别是int是设定负和非负整数,而uint是设定非负整数。
利用带有基数参数的parseInt()函数转化成一个十进制表示的字符串。用带有基数参数的Number, uint或int对象的toString()方法将十进制的数字转换为其它进制的字符串。
在ActionScript中无论设置一个什么样的数值,结果都被作为十进制检索:
// Create a Color object
var pink:ColorTransform = new ColorTransform( );
// Set the RGB value as a hexadecimal
pink.rgb = 0xF612AB;
// This displays the value as decimal: 16126635
trace(pink.rgb);
当然,如果想要输出其它形式的值,可以用toString(radix)对Number,unit或int对象的任何一个数字转换成字符串形式的另一种进制的值。
下面两个例子是将unit对象转换输出二进制和十六进制的字符串。
// The radix is 2, so output as binary
trace(new uint(51).toString(2)); // Displays: 110011
// The radix is 16, so output as hex
trace(new uint(25).toString(16)); // Displays: 19
当一个被符值的数字变量使用toString()方法时,flash会在执行toString()方法前自动建立一个新的Number, uint或int对象。虽然这不是典型的良好的习惯,但也不是技术上的错误,和在大部分应用程序的不同是可以忽略的。
var quantity:Number = 164;
trace(quantity.toString(16)); // Displays: a4
注意:这些例子的结果不是数字类型,而是字符串,像110011,19,A4。
下面的例子是设置一个ColorTransform对象的RGB值,执行toString()结果显示一个十六进制的值。
// Create a Color object
var pink:Color = new ColorTransform( );
// Set the RGB value as a hexadecimal
pink.rgb = 0xF612AB;
trace(pink.rgb.toString(16)); // Displays: f612ab
toString() 方法的基数叁数的有效范围是从 2 到 36。如果执行toString()不含参数或者无效参数,那么默认返回的是十进制。
用含有参数的parseInt()函数可以达到toString()的逆运算。parseInt()函数含有一个字符串值和一个数字。这有利于除十进制的工作。
下面三个例子展示了从二进制,十六进制和十进制的字符串转化为数字(注意这个结果总是一个十进制的)。
trace(parseInt("110011", 2)); // Displays: 51
trace(parseInt("19", 16)); // Displays: 25
trace(parseInt("17", 10)); // Displays: 17
如果省略,基数参数默认识10,除非、字符串以0x或0开头,这种情况默认是十六进制或八进制:
trace(parseInt("0x12")); // The radix is implicitly 16. Displays: 18
trace(parseInt("017")); // The radix is implicitly 8. Displays: 15
一个明确的基数会覆盖模糊的。在下面的例子中,得到的结果是0而不是12。当这个数被以十进制处理,碰到非数字字符x时转换会停止:
// The number is treated as a decimal, not a hexadecimal number
trace(parseInt("0x12", 10)); // Displays: 0 (not 12 or 18)
这样,在数字前面的0会被当作一个自由数字处理,而不是一个八进制的数:
// The number is treated as a decimal, not an octal number
trace(parseInt("017", 10)); // Displays: 17 (not 15)
千万不要忘记0,0x或一个明确的基数。下面输入的字符串作为十进制而返回NaN(不是数字)因为A不能转换成是个整数:
trace(parseInt("A9FC9C")); // NaN