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

时间:2011-08-12 08:46:39

标签: javascript jquery

假设我将值10分配给变量;

var values = 10;

如果值为正

,我想运行一个特定的函数
if(values = +integer){ 
    //do something with positive 
} else { 
    //do something with negative values 
}

如何实现这一目标?

17 个答案:

答案 0 :(得分:144)

if (values > 0) {
    // Do Something
}

答案 1 :(得分:19)

要检查,这是最快的方式,似乎:

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)< / strong>即可。这是一个很好的解决方案,因为0不是正数,并且它不是负数,但它可能是你的变量。

尝试失败:

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);}

答案 2 :(得分:17)

我是唯一一个读过这篇文章的人,并且意识到没有一个答案解决了问题的“整数”部分吗?

问题

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

一些简洁的优化

作为奖励,there are some shortcuts for converting from a float to an integer in JavaScript。在JavaScript中,所有按位运算符(|^&等)都会在运算前将您的数字转换为整数。我认为这是因为99%的开发人员不知道IEEE浮点标准,并且当“200 | 2”评估为400(ish)时会非常困惑。这些快捷方式比Math.floorparseInt 运行得更快,如果您尝试使用尽可能小的代码,它们会占用更少的字节:

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);

检查否定

Per @ 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控制台中,输出:123123123123123130000

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

答案 3 :(得分:10)

我想在这里你想要采取行动,如果它是积极的。

然后会建议:

[1] "abc_65prots_all_15mers.csv"

答案 4 :(得分:6)

1检查正值

在javascript简单比较中:值&gt; == 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

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

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中,更有用的是检查该值是否为&#34;安全整数&#34; (http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer) - 简单来说,这意味着我们可以添加/减去1到#34;安全整数&#34;并确保结果与数学课程的预期相同。 为了说明我的意思,下面是一些不安全操作的结果:

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

答案 5 :(得分:5)

if ( values > 0 ) {
    // Yeah, it's positive
}

答案 6 :(得分:5)

简单地写:

if(values > 0){
//positive
}
else{
//negative
}

答案 7 :(得分:5)

if(values >= 0) {
 // as zero is more likely positive than negative
} else {

}

答案 8 :(得分:4)

if ( values > 0 ) {
    //you got a positive value
}else{
    //you got a negative or zero value    
}

答案 9 :(得分:2)

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

 Math.sign(-3) // -1
 Math.sign(3) // 1
 Math.sign(-0) // -0
 Math.sign(0) // 0

答案 10 :(得分:1)

正整数:

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

}

答案 11 :(得分:0)

您可以使用移位位运算符,但它希望像-0那样获得+0Math.sign(x)之间的差异:

let num = -45;
if(num >> 31 === -1)
    alert('Negative number');
else
    alert('Positive number');

https://jsfiddle.net/obxptgze/

答案 12 :(得分:0)

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

Math.sign(parseInt(-3))

它会给您-1(负),0(零)和1(正)。

答案 13 :(得分:0)

从接收到的值是数字而不是字符串开始,如何使用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
}

答案 14 :(得分:0)

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

function isPositiveInteger(n) {
        return ($.isNumeric(n) && (n > 0));
}

答案 15 :(得分:0)

我在这种情况下使用并且有效:)

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++;
    }
}

答案 16 :(得分:-1)

用于检查正整数:

var isPositiveInteger = function(n) {
        return ($.isNumeric(n)) && (Math.floor(n) == n) && (n > 0); 
}