簡體   English   中英

檢測數字是從負數變為正數還是從正數變為負數

[英]Detect if number change from negative to positive or positive to negative

如何檢測正面或負面變化?

示例:

1更改為2 = false

0更改為1 = false

因為兩者都是正數

1更改為-1 = true

0更改為-1 = true

因為積極改變為消極

-1更改為0 = true

-1更改為1 = true

因為負面改變為正面

我喜歡..

var a_test,b_test;
if(a<0) {
    a_test = 'negative';
} else {
    a_test = 'positive';
}
if(b<0) {
    b_test = 'negative';
} else {
    b_test = 'positive';
}

if(a_test!==b_test) {
    alert('Yeah!');
}

測試: http //jsfiddle.net/e9QPP/

做任何更好的編碼做這樣的事情?


維基:負數是一個小於零的實數

根據Zen of PythonZen of Python

可讀性很重要。

所以,我提出了更具可讀性和代碼審查的傳遞版本

if (a < 0 && b >= 0 || a >= 0 && b < 0) {
    alert("Yeah");
}

你似乎想要

if (a*b<0) alert('Yeah!');

如果您想將0視為正數,則可以使用

if (a*b<0 || (!(a*b) && a+b<0)) alert('Yeah!');

采取合適的標志功能

function sign(x) {
  return typeof x === 'number' ? x ? x < 0 ? -1 : 1 : x === x ? 0 : NaN : NaN;
}

那么你的問題可以用清晰的(希望)簡單的術語來表達:

if (sign(a) !== sign(b)) {
  // Your code here
}

根據您的標准,您似乎只想比較兩個數字的符號。 符號存儲在數字的最高位,因此,為了比較符號,我們可以簡單地將所有其他位移出數字,並比較符號。

JavaScript中的數字是64位( double ),因此我們需要移除符號前面的63位:

if (a >>> 63 !== b >>> 63) alert('Yeah!');

這是一個jsFiddle演示

這是基於這里提供的4種方法jsPerf比較

請注意,這假設數字是64位。 我不知道該規范是否將其限制為64位,但是有些瀏覽器可能存在(或將是一天),其中數字可能由128位數字或更大數字表示。

也許有點晚了,但我遇到了同樣的問題。

假設您現在a和b是數字,為什么不:

if(a < 0 ? b >=0 : b < 0){
   // your code here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM