2009-06-04 55 views
1

新手给出不同的答案ActionScript 3的问题:为什么INT(等等)从(等等)以int

(Math.sqrt((r * r - (r - i) * (r - i)) as Number) * 2) as int 

给我从

int(Math.sqrt((r * r - (r - i) * (r - i)) as Number) * 2) 
+0

那么...你得到了什么样的结果? – 2009-06-04 08:07:43

回答

8

as运营商不同的结果是直接投,而int()含蓄地发现号码的底线(注意,它实际上并不呼叫Math.floor)。 Adobe docs for as表示它检查“第一个操作数是由第二个操作数指定的数据类型的成员”。由于9.59不能表示为int,因此as强制转换失败,返回null,而int()首先找到该数字的底部,然后将其转换为int。

你可以做Math.floor(blah) as int,它应该工作,但它会变慢。假设你想要一个四舍五入的整数,Math.round(blah) as int会更正确,但int(blah + .5)将是最快和正确回合。

2

作为运营商不是多一个演员,更像这样:

我是int? int:null;

这是令人困惑的地狱。它检查变量是否属于该类型,如果是,则返回该变量,否则将得到空值(0表示int)。