我正在寻找一种有效的方法来检查两个数字是否具有相同的符号.
基本上我正在寻找比这更优雅的方式:
var n1 = 1;
var n2 = -1;
( (n1 > 0 && n2 > 0) || (n1<0 && n2 < 0) )? console.log("equal sign"):console.log("different sign");
Run Code Online (Sandbox Code Playgroud)
使用按位运算符的解决方案也可以.
Jas*_*all 40
你可以将它们相乘; 如果他们有相同的标志,结果将是积极的.
bool sameSign = (n1 * n2) > 0
Run Code Online (Sandbox Code Playgroud)
use*_*466 16
代码字符较少,但可能会溢出:
n1*n2 > 0 ? console.log("equal sign") : console.log("different sign or zero");
Run Code Online (Sandbox Code Playgroud)
或者没有整数溢出,但略大:
(n1>0) == (n2>0) ? console.log("equal sign") : console.log("different sign");
Run Code Online (Sandbox Code Playgroud)
如果你认为0为正,那么>应该用<替换
使用按位xor
n1^n2 >= 0 ? console.log("equal sign") : console.log("different sign");
Run Code Online (Sandbox Code Playgroud)
基于您如何为特殊值定义“相同符号”:
NaN,NaN具有相同的符号?如果您的回答为“否”,则答案为:
Math.sign(a) === Math.sign(b)
Run Code Online (Sandbox Code Playgroud)
如果您的回答是“是”,则答案是:
Object.is(Math.sign(a) + 0, Math.sign(b) + 0)
Run Code Online (Sandbox Code Playgroud)