AS3将正数转换为1,将负数转换为-1

时间:2014-05-02 02:16:54

标签: actionscript-3 math

将数字转换为1或-1有一个简单的技巧。 把它提高到0的幂。 所以:

 4^0 =  1
-4^0 = -1

然而,在AS3中:

Math.pow( 4, 0); // = 1
Math.pow(-4, 0); // = 1

有没有办法在没有if的情况下得到正确答案?

2 个答案:

答案 0 :(得分:3)

这可以按位完成。

给定数字 n (平均时间:0.0065ms):

1 + 2 * (n >> 31);

或略慢(平均时间:0.0095ms):

(n < 0 && -1) || 1;

然而,Marty的解决方案是最快的(平均时间:0.0055ms)

n < 0 ? -1 : 1;

答案 1 :(得分:2)

不确定没有if / else 是否包含您眼中的三元运算符,但如果没有:

// Where x is your input.
var r:int = x < 0 ? -1 : 1;

无论如何都会比Math.pow()更有效率。