我正在寻找一种有效的方法来检查两个数字是否具有相同的符号。
基本上我正在寻找比这更优雅的方式:
var n1 = 1;
var n2 = -1;
( (n1 > 0 && n2 > 0) || (n1<0 && n2 < 0) )? console.log("equal sign"):console.log("different sign");
使用按位运算符的解决方案也可以。
答案 0 :(得分:38)
你可以将它们相乘;如果他们有相同的标志,结果将是积极的。
bool sameSign = (n1 * n2) > 0
答案 1 :(得分:15)
代码字符较少,但可能会溢出:
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为正,那么&gt;应该用&lt;
替换答案 2 :(得分:6)
使用按位xor
n1^n2 >= 0 ? console.log("equal sign") : console.log("different sign");
答案 3 :(得分:4)
这取决于您如何为特殊值定义“相同符号”:
NaN
,NaN
有相同的标志吗?如果您的答案为“否”,答案是:
Math.sign(a) === Math.sign(b)
如果您的答案为“是”,答案是:
Object.is(Math.sign(a) + 0, Math.sign(b) + 0)
答案 4 :(得分:1)
n = n1*n2;
if(n>0){ same sign }
else { different sign }
答案 5 :(得分:-1)
简单易行:
private void checkTheCheckInterval(Func<in SqlConnection, in Random, in TextBox, out Boolean> myFunc) {
}
答案 6 :(得分:-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;
}