8

重複の可能性:
Number.sign() in javascript

数値変数が与えられた場合、その符号を決定する最も簡単な方法は何ですか?

私は次のようなコードになってしまいます:

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

数字が負の場合は-1、正の場合は1、0の場合は0だけが必要な場合、エレガントではないようです。

「最も簡単」とは、エレガントまたはタイピングが少ないことを意味します。

または、値を絶対に増やす方法があるかもしれません。数値が負の場合は 1 を引き、正の場合は 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

より短い方法が必要で、それが数値であることがわかっていて、符号付き32ビット範囲に制限されてもかまわない場合は、次のように実行できます。

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

  • nの場合00
  • の場合、署名されてn >>> 31いる1ため、否定的であり、-1
  • の場合、署名されていないため、正であり、デフォルトn >>> 3101
于 2012-11-19T22:22:10.723 に答える
2

数値を絶対値で割ると、次の符号が得られます。

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