Newbie ActionScript 3问题:为什么
(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 :(得分:8)
as
运算符是直接转换,而int()
隐式查找数字的底限(请注意,它实际上并不会调用Math.floor
)。 Adobe docs for as
表示它检查“第一个操作数是第二个操作数指定的数据类型的成员”。由于9.59不能表示为int,as
强制转换失败返回null,而int()
首先找到数字的最低点,然后将其强制转换为int。
你可以做Math.floor(blah) as int
,它应该可以工作,但速度会慢一些。假设你想要一个舍入的int,Math.round(blah) as int
会更正确,但int(blah + .5)
将是最快和正确的圆。
答案 1 :(得分:2)
as运算符不像演员,更像是:
我是int? int:null;
这让人很困惑。它检查变量是否属于该类型,如果是,则返回变量,否则你将得到null(0表示int)。