[javascript] 숫자가 부동 또는 정수인지 어떻게 확인합니까?

어떻게 숫자입니다 찾기하는 floatinteger?

1.25 --> float
1 --> integer
0 --> integer
0.25 --> float



답변

1로 나눌 때 나머지를 확인하십시오.

function isInt(n) {
   return n % 1 === 0;
}

인수가 숫자인지 모른다면 두 가지 테스트가 필요합니다.

function isInt(n){
    return Number(n) === n && n % 1 === 0;
}

function isFloat(n){
    return Number(n) === n && n % 1 !== 0;
}


이 답변이 작성된 후 5 년이 지난 2019업데이트 된 솔루션은 ECMA Script 2015에서 표준화되었습니다.이 솔루션은 이 답변에서 다룹니다 .


답변

이 함수를 사용하여 값이 소수 부분이없고 정확한 정수로 표시 될 수있는 크기 한계 내에있는 숫자 기본 값인지 테스트하십시오.

function isFloat(n) {
    return n === +n && n !== (n|0);
}

function isInteger(n) {
    return n === +n && n === (n|0);
}


답변

왜 이런 식으로하지?

var isInt = function(n) { return parseInt(n) === n };


답변

Number.isInteger()IE 이외의 모든 것에 현재 구현되어 있는 메소드 가 있습니다. MDN 은 다른 브라우저를위한 폴리 필도 제공합니다.

Number.isInteger = Number.isInteger || function(value) {
  return typeof value === 'number' &&
    isFinite(value) &&
    Math.floor(value) === value;
};

그러나 대부분의 사용 사례의 경우 Number.isSafeInteger 값을 너무 높거나 낮게 설정하여 소수점 이하 자릿수가 손실되었는지 확인하는 것이 좋습니다. MDN 에는 이에 대한 폴리 파일도 있습니다. (또한 isInteger위 의 pollyfill이 필요합니다 .)

if (!Number.MAX_SAFE_INTEGER) {
    Number.MAX_SAFE_INTEGER = 9007199254740991; // Math.pow(2, 53) - 1;
}
Number.isSafeInteger = Number.isSafeInteger || function (value) {
   return Number.isInteger(value) && Math.abs(value) <= Number.MAX_SAFE_INTEGER;
};


답변

간단한 정규식을 사용할 수 있습니다.

function isInt(value) {

    var er = /^-?[0-9]+$/;

    return er.test(value);
}

또는 필요에 따라 아래 기능도 사용할 수 있습니다. 그것들은 PHPJS Project에 의해 개발되었습니다 .

is_int() => 변수 유형이 정수인지, 내용이 정수인지 확인

is_float() => 변수 유형이 부동인지 그리고 내용이 부동인지 확인

ctype_digit() => 변수 유형이 문자열인지, 내용에 10 진수 만 있는지 확인하십시오.

업데이트 1

이제 @ChrisBartley 의견에 감사드립니다 .


답변

다음은 값이 숫자인지 또는 숫자로 안전하게 변환 될 수 있는지 확인하는 효율적인 함수입니다 .

function isNumber(value) {
    if ((undefined === value) || (null === value)) {
        return false;
    }
    if (typeof value == 'number') {
        return true;
    }
    return !isNaN(value - 0);
}

그리고 정수의 경우 (값이 float이면 false를 반환합니다) :

function isInteger(value) {
    if ((undefined === value) || (null === value)) {
        return false;
    }
    return value % 1 == 0;
}

여기서 효율성은 값이 이미 숫자 인 경우 parseInt (또는 parseNumber)를 피할 수 있다는 것입니다. 두 구문 분석 함수는 항상 문자열로 먼저 변환 한 다음 해당 문자열을 구문 분석하려고 시도합니다. 값이 이미 숫자이면 낭비입니다.

최적화를위한 추가 아이디어를 제공 한 다른 게시물에 감사합니다!


답변

function isInteger(x) { return typeof x === "number" && isFinite(x) && Math.floor(x) === x; }
function isFloat(x) { return !!(x % 1); }

// give it a spin

isInteger(1.0);        // true
isFloat(1.0);          // false
isFloat(1.2);          // true
isInteger(1.2);        // false
isFloat(1);            // false
isInteger(1);          // true    
isFloat(2e+2);         // false
isInteger(2e+2);       // true
isFloat('1');          // false
isInteger('1');        // false
isFloat(NaN);          // false
isInteger(NaN);        // false
isFloat(null);         // false
isInteger(null);       // false
isFloat(undefined);    // false
isInteger(undefined);  // false