8

可能重复:
JavaScript 中的 Number.sign()

给定一些数字变量,确定它的符号的最简单方法是什么?

我一直以这样的代码结束:

var direction = (vector[0] > 0) ? 1: (vector[0] < 0) ? -1: 0;

这似乎不太优雅,当我想要的只是数字为负时为 -1,如果为正则为 1,如果为 0 则为 0。

我所说的“最简单”是指优雅或更少的打字。

或者,也许有一种方法可以绝对增加价值。就像如果数字是负数,则从中减去 1,如果是正数,则将其加一。Math.abs() 提供绝对值,但是一旦运行 Math.abs() 就无法将其转换回有符号数。

4

4 回答 4

14

你可以这样做:

var sign = number && number / Math.abs(number);
于 2012-11-19T22:13:48.967 回答
4

如何定义一个函数来做到这一点?

sign = function(n) { return n == 0 ? 0 : n/Math.abs(n); }
于 2012-11-19T22:14:23.537 回答
2

您可以将数字除以其绝对值,您将得到符号:

var sign = number && number / Math.abs(number);
于 2012-11-19T22:13:37.610 回答
2

如果您想要更短的方式,并且您知道它是一个数字,并且您不介意被限制在有符号的 32 位范围内,您可以这样做:

n ? -(n >>> 31) || 1 : 0;

  • 如果n0,那么0
  • 如果n >>> 311,它被签署,所以否定,并且将被否定-1
  • 如果n >>> 310,它没有被签名,所以是肯定的,默认为1
于 2012-11-19T22:22:10.723 回答