Typescript에서 isNaN은 숫자 값만 허용한다는 오류를 표시합니다.
isNaN('9BX46B6A')
다음으로 parseFloat('9BX46B6A')
평가 되기 때문에 false를 반환 합니다.9
isNaN(parseFloat('9BX46B6A'))
Visual Studio에 오류가 표시되어 계속 실행할 수 있지만 올바른 방법으로 수행하고 싶습니다.
현재이 수정 함수를 작성했습니다.
static isNaNModified = (inputStr: string) => {
var numericRepr = parseFloat(inputStr);
return isNaN(numericRepr) || numericRepr.toString().length != inputStr.length;
}
답변
숫자로 된 문자열로 변환하는 방법은 함께 Number
하지 parseFloat
.
Number('1234') // 1234
Number('9BX9') // NaN
속기를 원하는 경우 단항 더하기 연산자를 사용할 수도 있습니다.
+'1234' // 1234
+'9BX9' // NaN
NaN에 대해 확인할 때주의하십시오 (운영자 ===
와 !==
작동하지 않습니다 NaN
). 사용하다:
isNaN(maybeNumber) // returns true if NaN, otherwise false
답변
업데이트 2
이 방법은 더 이상 rxjs v6에서 사용할 수 없습니다
rxjs 라이브러리 의 isNumeric 연산자를 사용하여 해결했습니다 ( rxjs / util / isNumeric 가져 오기
최신 정보
import { isNumeric } from 'rxjs/util/isNumeric';
. . .
var val = "5700";
if (isNumeric(val)){
alert("it is number !");
}
답변
function isNumber(value: string | number): boolean
{
return ((value != null) &&
(value !== '') &&
!isNaN(Number(value.toString())));
}
답변
간단한 답변 : (공백 및 null을 감시하십시오)
isNaN(+'111') = false;
isNaN(+'111r') = true;
isNaN(+'r') = true;
isNaN(+'') = false;
isNaN(null) = false;
답변
기존의 이미 테스트 된 솔루션을 선택합니다. 예를 들어 typescript의 rxjs는 다음과 같습니다.
function isNumeric(val: any): val is number | string {
// parseFloat NaNs numeric-cast false positives (null|true|false|"")
// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
// subtraction forces infinities to NaN
// adding 1 corrects loss of precision from parseFloat (#15100)
return !isArray(val) && (val - parseFloat(val) + 1) >= 0;
}
rxjs isArray () 함수가없고 간단한 타이핑이있는 경우 :
function isNumeric(val: any): boolean {
return !(val instanceof Array) && (val - parseFloat(val) + 1) >= 0;
}
항상 사용 사례를 통해 이러한 기능을 테스트해야합니다. 특수한 값 유형이있는 경우이 기능이 솔루션이 아닐 수 있습니다.
여기서 기능을 테스트 할 수 있습니다.
결과는 다음과 같습니다
enum : CardTypes.Debit : true
decimal : 10 : true
hexaDecimal : 0xf10b : true
binary : 0b110100 : true
octal : 0o410 : true
stringNumber : '10' : true
string : 'Hello' : false
undefined : undefined : false
null : null : false
function : () => {} : false
array : [80, 85, 75] : false
turple : ['Kunal', 2018] : false
object : {} : false
보다시피이 함수를 열거 형과 함께 사용하는 경우주의해야합니다.
답변
대부분의 경우 확인하려는 값은 문자열 또는 숫자이므로 여기에 내가 사용하는 함수가 있습니다.
const isNumber = (n: string | number): boolean =>
!isNaN(parseFloat(String(n))) && isFinite(Number(n));
const willBeTrue = [0.1, '1', '-1', 1, -1, 0, -0, '0', "-0", 2e2, 1e23, 1.1, -0.1, '0.1', '2e2', '1e23', '-0.1', ' 898', '080']
const willBeFalse = ['9BX46B6A', "+''", '', '-0,1', [], '123a', 'a', 'NaN', 1e10000, undefined, null, NaN, Infinity, () => {}]
답변
이 Number.isFinite()
기능을 사용할 수 있습니다 :
Number.isFinite(Infinity); // false
Number.isFinite(NaN); // false
Number.isFinite(-Infinity); // false
Number.isFinite('0'); // false
Number.isFinite(null); // false
Number.isFinite(0); // true
Number.isFinite(2e64); // true
참고 : 전역 함수 isFinite()
와 후자 사이에는 큰 차이가 Number.isFinite()
있습니다. 전자의 경우, 문자열 강제 변환을 수행한다 – 그래서 isFinite('0') === true
동안 Number.isFinite('0') === false
.
또한 IE에서는 사용할 수 없습니다.