假设我将值10分配给变量;
var values = 10;
如果值为正
,我想运行一个特定的函数if(values = +integer){
//do something with positive
} else {
//do something with negative values
}
如何实现这一目标?
答案 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.floor
或parseInt
运行得更快,如果您尝试使用尽可能小的代码,它们会占用更少的字节:
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)
在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;
}
要检查该数字是否为整数,我们可以使用以下函数:
function isInteger (number) {
return parseInt(number) === number;
}
//* in ECMA Script 6 use Number.isInteger
在这种情况下,我们检查该数字没有任何指数部分(请注意,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
那样获得+0
和Math.sign(x)
之间的差异:
let num = -45;
if(num >> 31 === -1)
alert('Negative number');
else
alert('Positive number');
答案 12 :(得分:0)
答案 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);
}