[javascript] 숫자가 부동 또는 정수인지 어떻게 확인합니까?
어떻게 숫자입니다 찾기하는 float
나 integer
?
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