13

我正在寻找一种有效的方法来检查两个数字是否具有相同的符号。

基本上我正在寻找比这更优雅的方式:

var n1 = 1;
var n2 = -1;

( (n1 > 0 && n2 > 0) || (n1<0 && n2 < 0) )? console.log("equal sign"):console.log("different sign");

使用按位运算符的解决方案也可以。

4

7 回答 7

43

您可以将它们相乘;如果它们具有相同的符号,则结果将是肯定的。

bool sameSign = (n1 * n2) > 0
于 2012-04-24T12:48:58.190 回答
19

代码字符更少,但可能会溢出:

n1*n2 > 0 ? console.log("equal sign") : console.log("different sign or zero");

或没有整数溢出,但稍大:

(n1>0) == (n2>0) ? console.log("equal sign") : console.log("different sign");

如果您认为 0 为正值,则 > 应替换为 <

于 2012-04-24T12:49:35.317 回答
8

使用按位异或

n1^n2 >= 0 ? console.log("equal sign") : console.log("different sign");
于 2012-04-24T13:15:02.357 回答
6

这基于您如何为特殊值定义“相同符号”:

  • ,有相同的符号吗NaNNaN

如果您的答案是“否”,那么答案是:

Math.sign(a) === Math.sign(b)

如果您的答案是“是”,那么答案是:

Object.is(Math.sign(a) + 0, Math.sign(b) + 0)
于 2017-05-31T05:39:51.587 回答
1
n = n1*n2;
if(n>0){ same sign }
else { different sign }
于 2012-04-24T12:50:07.187 回答
1

简单易行:

bool sameSign = ((n1 < 0) == (n2 < 0)); 
于 2016-12-29T13:20:36.320 回答
-4

也许正则表达式应该可以解决问题

function isNegative(num) { 
        if (num.match(/^-\d+$/)) {
            return true;
        } else {
            return false;
        }
   }


function isSameSign(num1, num2) { 
        var sameSign = false;  
        if (num1.match(/^-\d+$/) && num2.match(/^-\d+$/) ) {
                sameSign = true;
            } else if(!num2.match(/^-\d+$/) && !num2.match(/^-\d+$/)) {
                sameSign =true;
            }
        return sameSign;
       }
于 2012-04-24T12:55:45.673 回答