The Math. sign() is a builtin function in JavaScript and is used to know the sign of a number, indicating whether the number specified is negative or positive.
The Math. sign() method retuns whether a number is negative, positive or zero. If the number is positive, this method returns 1. If the number is negative, it returns -1.
abs() method with a minus, e.g. -Math. abs(10) . When prefixed with a minus, the Math. abs method will always return a negative number.
More elegant version of fast solution:
var sign = number?number<0?-1:1:0
Dividing the number by its absolute value also gives its sign. Using the short-circuiting logical AND operator allows us to special-case 0
so we don't end up dividing by it:
var sign = number && number / Math.abs(number);
The function you're looking for is called signum, and the best way to implement it is:
function sgn(x) {
return (x > 0) - (x < 0);
}
Should this not support JavaScript’s (ECMAScript’s) signed zeroes? It seems to work when returning x rather than 0 in the “megafast” function:
function sign(x) {
return typeof x === 'number' ? x ? x < 0 ? -1 : 1 : x === x ? x : NaN : NaN;
}
This makes it compatible with a draft of ECMAScript’s Math.sign (MDN):
Returns the sign of the x, indicating whether x is positive, negative or zero.
- If x is NaN, the result is NaN.
- If x is −0, the result is −0.
- If x is +0, the result is +0.
- If x is negative and not −0, the result is −1.
- If x is positive and not +0, the result is +1.
For people who are interested what is going on with latest browsers, in ES6 version there is a native Math.sign method. You can check the support here.
Basically it returns -1
, 1
, 0
or NaN
Math.sign(3); // 1
Math.sign(-3); // -1
Math.sign('-3'); // -1
Math.sign(0); // 0
Math.sign(-0); // -0
Math.sign(NaN); // NaN
Math.sign('foo'); // NaN
Math.sign(); // NaN
var sign = number >> 31 | -number >>> 31;
Superfast if you do not need Infinity and know that the number is an integer, found in openjdk-7 source: java.lang.Integer.signum()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With