javascript-如何检查给定的值是正整数还是负整数?

假设我为变量分配了值10;

var values = 10;

我想运行一个特定的功能,如果该值是一个正数

if(values = +integer){ 
    //do something with positive 
} else { 
    //do something with negative values 
}

如何实现?

Xavier asked 2019-10-09T09:31:17Z
16个解决方案
145 votes
if (values > 0) {
    // Do Something
}
Peter Kelly answered 2019-10-09T09:31:21Z
19 votes

仅检查一下,这似乎是最快的方法:

var sign = number > 0 ? 1 : number == 0 ? 0 : -1; 
//Is "number": greater than zero? Yes? Return 1 to "sign".
//Otherwise, does "number" equal zero?  Yes?  Return 0 to "sign".  
//Otherwise, return -1 to "sign".

它告诉您符号是否为正(返回1)或等于零(返回0),否则为(返回-1)。 这是一个很好的解决方案,因为0不是正数,也不是负数,但可能是您的var。

尝试失败:

var sign = number > 0 ? 1 : -1;

...将0当作一个负整数,这是错误的。

如果您试图设置条件,则可以进行相应的调整。 这是if / else-if语句的两个类似示例:

例1:

number = prompt("Pick a number?");
if (number > 0){
  alert("Oh baby, your number is so big!");}
else if (number == 0){
  alert("Hey, there's nothing there!");}
else{
  alert("Wow, that thing's so small it might be negative!");}

范例2:

number = prompt("Pick a number?");

var sign = number > 0 ? 1 : number == 0 ? 0 : -1;

if (sign == 1){
  alert("Oh baby, your number is so big!" + " " + number);}
else if (sign == 0){
  alert("Hey, there's nothing there!" + " " + number);}
else if (sign == -1){
  alert("Wow, that thing's so small it might be negative!" + " " + number);}
Wolfpack'08 answered 2019-10-09T09:32:17Z
15 votes

我是唯一读过此书并意识到答案没有解决问题的“整数”部分的人吗?

问题

var myInteger = 6;
var myFloat = 6.2;
if( myInteger > 0 )
    // Cool, we correctly identified this as a positive integer
if( myFloat > 0 )
    // Oh, no! That's not an integer!

解决方案

为了确保您正在处理整数,您需要将值转换为整数,然后将其与自身进行比较。

if( parseInt( myInteger ) == myInteger && myInteger > 0 )
    // myInteger is an integer AND it's positive
if( parseInt( myFloat ) == myFloat && myFloat > 0 )
    // myFloat is NOT an integer, so parseInt(myFloat) != myFloat

一些巧妙的优化

另外,JavaScript中有一些将浮点数转换为整数的捷径。 在JavaScript中,所有按位运算符(|parseInt&等)都将在操作前将您的数字转换为整数。 我认为这是因为99%的开发人员不知道IEEE浮点标准,并且当“ 200 | 2”评估为400(ish)时会感到非常困惑。 这些快捷方式的运行速度通常比2561475760628433933922或2561475760628433933923快,并且如果您尝试生成最小的代码,它们将占用更少的字节:

if( myInteger | 0 == myInteger && myInteger > 0 )
    // Woot!
if( myFloat | 0 == myFloat && myFloat > 0 )
    // Woot, again!

但是,等等,还有更多!

这些按位运算符正在处理32位有符号整数。 这意味着最高位是符号位。 通过将符号位强制为零,您的数字只有在为正数时才保持不变。 您可以使用此功能一次检查正负和整数:

// Where 2147483647 = 01111111111111111111111111111111 in binary
if( (myInteger & 2147483647) == myInteger )
    // myInteger is BOTH positive and an integer
if( (myFloat & 2147483647) == myFloat )
    // Won't happen
* note bit AND operation is wrapped with parenthesis to make it work in chrome (console)

如果您在记住这个复杂的数字时遇到麻烦,也可以像这样预先计算:

var specialNumber = ~(1 << 31);

检查底片

根据@Reinsbrain的评论,可以使用类似的按位破解来检查负整数。 在负数中,我们确实希望最左边的位为1,因此通过将此位强制为1,仅当它以负数开头时,该数字将保持不变:

// Where -2147483648 = 10000000000000000000000000000000 in binary
if( (myInteger | -2147483648) == myInteger )
    // myInteger is BOTH negative and an integer
if( (myFloat | -2147483648) == myFloat )
    // Won't happen

这个特殊数字甚至更容易计算:

var specialNumber = 1 << 31;

边缘情况

如前所述,由于JavaScript按位运算符会转换为32位整数,因此不能容纳32位(大于20亿)的数字将失败

您可以使用以下较长的解决方案:

if( parseInt(123456789000) == 123456789000 && 123456789000 > 0 )

但是,即使此解决方案在某些时候也失败了,因为parseInt的精度在数量上受到限制。 尝试以下操作,看看会发生什么:

parseInt(123123123123123123123); // That's 7 "123"s

在我的计算机上,在Chrome控制台中,此输出为:12312312312312313130000

这样做的原因是parseInt将输入视为64位IEEE浮点数。 这仅提供了52个尾数位,这意味着在开始舍入之前最大值为〜4.5e15

stevendesu answered 2019-10-09T09:34:24Z
10 votes

我以为您想采取积极的行动。

然后会建议:

if (Math.sign(number_to_test) === 1) {
     function_to_run_when_positive();
}
Mickey Puri answered 2019-10-09T09:34:55Z
6 votes

1检查正值

在javascript中,像这样的简单比较:由于存在-0和+0,值> == 0无法为我们提供答案(这个概念源于微分方程式)下面是这些值及其属性的示例:

var negativeZero = -0;
var negativeZero = -1 / Number.POSITIVE_INFINITY;
var negativeZero = -Number.MIN_VALUE / Number.POSITIVE_INFINITY;

var positiveZero = 0;
var positiveZero = 1 / Number.POSITIVE_INFINITY;
var positiveZero = Number.MIN_VALUE / Number.POSITIVE_INFINITY;

-0 === +0                     // true
1 / -0                        // -Infinity
+0 / -0                       // NaN
-0 * Number.POSITIVE_INFINITY // NaN

考虑到这一点,我们可以编写像波纹管这样的函数来检查给定数字的符号:

function isPositive (number) {
    if ( number > 0 ) { 
        return true;
    }
    if (number < 0) {
        return false;
    }
    if ( 1 / number === Number.POSITIVE_INFINITY ) {
        return true;
    }
    return false;
}

2a检查数字是否为整数(在数学意义上)

要检查数字是否为整数,我们可以使用下面的函数:

function isInteger (number) {
    return parseInt(number) === number;
}
//* in ECMA Script 6 use Number.isInteger

2b检查数字是否为整数(计算机科学中)

在这种情况下,我们要检查数字是否没有指数部分(请注意,在JS中,数字以双精度浮点格式表示)但是,在JavaScript中,更有用的方法是检查该值是否为“安全整数”([http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)]-简单地说 表示我们可以在“安全整数”上加/减1,并确保结果与数学课中的预期结果相同。为了说明我的意思,以下是一些不安全操作的结果:

Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2;          // true
Number.MAX_SAFE_INTEGER * 2 + 1 === Number.MAX_SAFE_INTEGER * 2 + 4;  // true

好的,因此要检查数字是否为安全整数,我们可以使用Number.MAX_SAFE_INTEGER / Number.MIN_SAFE_INTEGER和parseInt来确保该数字完全是整数。

function isSafeInteger (number) {
    return parseInt(number) === number
    && number <== Number.MAX_SAFE_INTEGER
    && number >== Number.MIN_SAFE_INTEGER
}
//* in ECMA Script 6 use Number.isSafeInteger
Rafal Bartoszek answered 2019-10-09T09:36:06Z
5 votes
if ( values > 0 ) {
    // Yeah, it's positive
}
Gustav Barkefors answered 2019-10-09T09:36:23Z
5 votes

只需写:

if(values > 0){
//positive
}
else{
//negative
}
Ankit answered 2019-10-09T09:36:48Z
5 votes
if(values >= 0) {
 // as zero is more likely positive than negative
} else {

}
Thorben answered 2019-10-09T09:37:06Z
4 votes
if ( values > 0 ) {
    //you got a positive value
}else{
    //you got a negative or zero value    
}
Varun answered 2019-10-09T09:37:24Z
2 votes

要检查一个数字是正,负或负零。 使用检查其标志Math.sign()方法,它将根据正负数和负零或零数为您提供-1,-0、0和1

 Math.sign(-3) // -1
 Math.sign(3) // 1
 Math.sign(-0) // -0
 Math.sign(0) // 0
Amitesh Maurya answered 2019-10-09T09:37:48Z
1 votes

正整数:

if (parseInt(values, 10) > 0) {

}
Ha Ja answered 2019-10-09T09:38:13Z
0 votes

我在这种情况下使用,它有效:)

var pos = 0; 
var sign = 0;
var zero = 0;
var neg = 0;
for( var i in arr ) {
    sign = arr[i] > 0 ? 1 : arr[i] == 0 ? 0 : -1;
    if (sign === 0) {
        zero++; 
    } else if (sign === 1 ) {
        pos++;
    } else {
        neg++;
    }
}
Ezequiel García answered 2019-10-09T09:38:37Z
0 votes

您首先应该使用isNumeric()函数检查输入值是否为整数。 然后加上条件或大于0。这是它的jQuery代码。

function isPositiveInteger(n) {
        return ($.isNumeric(n) && (n > 0));
}
yogihosting answered 2019-10-09T09:39:02Z
0 votes

从接收到的值是数字而不是字符串的基数开始,如何使用Math.abs()? 此JavaScript本机函数返回数字的绝对值:

Math.abs(-1) // 1

因此,您可以通过以下方式使用它:

var a = -1;
if(a == Math.abs(a)){
    // false 
}

var b = 1;   
if(b == Math.abs(b)){
    // true
}
Luis SP answered 2019-10-09T09:39:33Z
0 votes

我知道已经有一段时间了,但是还有一个更优雅的解决方案。 来自mozilla  docs:

Math.sign(parseInt(-3))

负数为-1,零数为0,正数为1。

Marco answered 2019-10-09T09:40:05Z
-1 votes

用于检查正整数:

var isPositiveInteger = function(n) {
        return ($.isNumeric(n)) && (Math.floor(n) == n) && (n > 0); 
}
Mahesh answered 2019-10-09T09:40:29Z
translate from https://stackoverflow.com:/questions/7037669/how-to-check-the-value-given-is-a-positive-or-negative-integer