我正在寻找一种有效的方法来检查两个数字是否具有相同的符号。
基本上我正在寻找比这更优雅的方式:
var n1 = 1;
var n2 = -1;
( (n1 > 0 && n2 > 0) || (n1<0 && n2 < 0) )? console.log("equal sign"):console.log("different sign");
使用按位运算符的解决方案也可以。
我正在寻找一种有效的方法来检查两个数字是否具有相同的符号。
基本上我正在寻找比这更优雅的方式:
var n1 = 1;
var n2 = -1;
( (n1 > 0 && n2 > 0) || (n1<0 && n2 < 0) )? console.log("equal sign"):console.log("different sign");
使用按位运算符的解决方案也可以。
您可以将它们相乘;如果它们具有相同的符号,则结果将是肯定的。
bool sameSign = (n1 * n2) > 0
代码字符更少,但可能会溢出:
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 为正值,则 > 应替换为 <
使用按位异或
n1^n2 >= 0 ? console.log("equal sign") : console.log("different sign");
这基于您如何为特殊值定义“相同符号”:
NaN
?NaN
如果您的答案是“否”,那么答案是:
Math.sign(a) === Math.sign(b)
如果您的答案是“是”,那么答案是:
Object.is(Math.sign(a) + 0, Math.sign(b) + 0)
n = n1*n2;
if(n>0){ same sign }
else { different sign }
简单易行:
bool sameSign = ((n1 < 0) == (n2 < 0));
也许正则表达式应该可以解决问题
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;
}