我想将-x
和x
之间的值标准化为-1
和1
。
我想过value / Math.abs(value)
,但问题是如果
值为0但不起作用。
是否有可能没有if和else,所以只进行一次操作?
也许我应该补充一点,这个值只能是-x,x或0.之间的任何内容。
答案 0 :(得分:4)
value / Math.abs(x)
是你需要的。 x
显然不应该为零。
另外,您应该考虑在value > x
时如何处理案例。
答案 1 :(得分:1)
看一下java.lang.Integer类。有一些很好的静态方法可以帮助你,主要是Integer.signum(int)
这将完成这项工作,如果你想要0转换为1,添加0的检查:
int x = value == 0 ? 1 : Integer.signum(value);
编辑:Long同样包含使用long执行作业的方法。
或者,no-if代码;可能比较慢,但OP专门要求它:
final static int[] TABLE = { -1, 1 (or 0), 1 };
int x = TABLE[Integer.signum(value) + 1];
答案 2 :(得分:0)
让我们假设你只想要数字的符号。你可以使用
double sign = Math.signum(x);
注意:这会返回NaN表示NaN,0表示0。
如果您希望0
返回其他值,则可以选择其他值。
注意:条件可能更简单/更清楚。 e.g。
int sign = x < 0 ? -1 : +1;
或
int sign = x > 0 ? +1 : x < 0 : -1 : 0;
答案 3 :(得分:0)
Herr是一种数学方法,我从-5开始到5并且在-1转换为1
max=1;
min=-1;
maxold=-5;
minold=5;
value=2;
newvalue= (max-min)/(maxold-minold)*(value-minold)+min;
alert(newvalue);