주어진 값이 양수인지 음수인지 확인하는 방법은 무엇입니까?
변수에 할당 된 값 10이 있다고 가정 해 보겠습니다.
var values = 10;
값이 양수이면 특정 기능을 실행하고 싶습니다.
if(values = +integer){
//do something with positive
} else {
//do something with negative values
}
이것이 어떻게 달성 될까요?
if (values > 0) {
// Do Something
}
확인하기 위해 이것이 가장 빠른 방법입니다.
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 (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);}
이 글을 읽고 질문의 "정수"부분에 대한 답변이 없다는 것을 깨달은 유일한 사람입니까?
문제
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에서 float를 정수로 변환하는 몇 가지 단축키가 있습니다 . 자바 스크립트, 모든 비트 연산자는 ( |
, ^
, &
, 등)을 작동하기 전에 정수로 전화 번호를 캐스팅합니다. 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 비트 부호있는 정수에서 작동합니다. 이것은 가장 높은 비트가 부호 비트임을 의미합니다. 부호 비트를 0으로 설정 하면 양수인 경우에만 숫자가 변경되지 않습니다 . 이것을 사용하여 한 번의 타격으로 긍정 성과 정수성을 확인할 수 있습니다.
// 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 콘솔에서 다음과 같이 출력됩니다. 123123123123123130000
그 이유는 parseInt가 입력을 64 비트 IEEE float처럼 취급하기 때문입니다. 이것은 가수에 대해 52 비트 만 제공합니다. 이는 반올림을 시작하기 전에 최대 값이 ~ 4.5e15임을 의미합니다.
여기서 긍정적 인 행동을하고 싶다고 생각했습니다.
그런 다음 제안합니다.
if (Math.sign(number_to_test) === 1) {
function_to_run_when_positive();
}
간단히 작성하십시오.
if(values > 0){
//positive
}
else{
//negative
}
1 양수 값 확인
자바 스크립트에서 다음과 같은 간단한 비교 : value> == 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 숫자가 정수인지 확인 (컴퓨터 과학)
In this case we are checking that number does not have any exponential part (please note that in JS numbers are represented in double-precision floating-point format) However in javascript it is more usable to check that value is "safe integer" (http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer) - to put it simple it means that we can add/substract 1 to "safe integer" and be sure that result will be same as expected from math lessons. To illustrate what I mean, result of some unsafe operations bellow:
Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // true
Number.MAX_SAFE_INTEGER * 2 + 1 === Number.MAX_SAFE_INTEGER * 2 + 4; // true
Ok, so to check that number is safe integer we can use Number.MAX_SAFE_INTEGER / Number.MIN_SAFE_INTEGER and parseInt to ensure that number is integer at all.
function isSafeInteger (number) {
return parseInt(number) === number
&& number <== Number.MAX_SAFE_INTEGER
&& number >== Number.MIN_SAFE_INTEGER
}
//* in ECMA Script 6 use Number.isSafeInteger
if(values >= 0) {
// as zero is more likely positive than negative
} else {
}
if ( values > 0 ) {
// Yeah, it's positive
}
if ( values > 0 ) {
//you got a positive value
}else{
//you got a negative or zero value
}
To check a number is positive, negative or negative zero. Check its sign using Math.sign() method it will provide you -1,-0,0 and 1 on the basis of positive negative and negative zero or zero numbers
Math.sign(-3) // -1
Math.sign(3) // 1
Math.sign(-0) // -0
Math.sign(0) // 0
Positive integer:
if (parseInt(values, 10) > 0) {
}
I use in this case and it works :)
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++;
}
}
You should first check if the input value is interger with isNumeric() function. Then add the condition or greater than 0. This is the jQuery code for it.
function isPositiveInteger(n) {
return ($.isNumeric(n) && (n > 0));
}
Starting from the base that the received value is a number and not a string, what about use Math.abs()
? This JavaScript native function returns the absolute value of a number:
Math.abs(-1) // 1
So you can use it this way:
var a = -1;
if(a == Math.abs(a)){
// false
}
var b = 1;
if(b == Math.abs(b)){
// true
}
I know it's been some time, but there is a more elegant solution. From the mozilla docs:
Math.sign(parseInt(-3))
It will give you -1 for negative, 0 for zero and 1 for positive.
For checking positive integer:
var isPositiveInteger = function(n) {
return ($.isNumeric(n)) && (Math.floor(n) == n) && (n > 0);
}
'Development Tip' 카테고리의 다른 글
Swift iOS에서 기기 방향 설정 (0) | 2020.11.25 |
---|---|
nan 값을 0으로 변환 (0) | 2020.11.25 |
Jekyll 설치 오류-기본 확장 빌드 (0) | 2020.11.25 |
뒤로 버튼을 감지하지만 dialogfragment를 닫지 않음 (0) | 2020.11.25 |
android.support.v7.internal.widget.ActionBarOverlayLayout을 인스턴스화 할 수 없습니다. (0) | 2020.11.25 |