자바스크립트의 숫자에서 선행 0 제거
중복 가능:
자바스크립트에서 문자열의 선행 0 자르기
자바스크립트에서 숫자에서 선행 0을 제거하는 가장 간단하고 크로스 브라우저 호환 방법은 무엇입니까?
예를 들어 텍스트 상자 값이 014 또는 065인 경우 14 또는 65만 반환해야 합니다.
우리는 이 변환을 위해 네가지 방법을 사용할 수 있습니다.
- radix로 int 구문 분석
10
- 숫자 생성자
- 유니리 플러스 연산자
- 수학적 함수(감산) 사용
const numString = "065";
//parseInt with radix=10
let number = parseInt(numString, 10);
console.log(number);
// Number constructor
number = Number(numString);
console.log(number);
// unary plus operator
number = +numString;
console.log(number);
// conversion using mathematical function (subtraction)
number = numString - 0;
console.log(number);
업데이트(댓글 기준):왜 이것은 "대수"에서는 작동하지 않습니까?
원시형의 경우Number
, 가장 안전한 최대값은 2입니다53-1.
console.log(Number.MAX_SAFE_INTEGER);
이제 숫자열 '09999999999999999'를 생각해보고 위의 방법들을 사용하여 변환을 시도해보겠습니다.
const numString = '099999999999999999999';
let parsedNumber = parseInt(numString, 10);
console.log(`parseInt(radix=10) result: ${parsedNumber}`);
parsedNumber = Number(numString);
console.log(`Number conversion result: ${parsedNumber}`);
parsedNumber = +numString;
console.log(`Appending Unary plus operator result: ${parsedNumber}`);
parsedNumber = numString - 0;
console.log(`Subtracting zero conversion result: ${parsedNumber}`);
모든 결과가 틀리게 됩니다.
변환할 때 numString 값이 다음 값보다 크기 때문입니다.Number.MAX_SAFE_INTEGER
.예.,
99999999999999999999 > 9007199254740991
이는 다음과 같은 가정 하에 수행되는 모든 작업을 의미합니다.string
로 변환할 수 있습니다.number
type fails 입니다.
2보다53 큰 숫자의 경우 최근에 프리미티브가 추가되었습니다.브라우저 호환성 확인BigInt
여기에
변환 코드는 이렇게 됩니다.
const numString = '099999999999999999999';
const number = BigInt(numString);
추신: 래딕스가 중요한 이유는 무엇입니까?parseInt
?
radix가 정의되지 않거나 0(또는 부재)인 경우, JavaScript는 다음을 가정합니다.
- 입력 문자열이 "0x" 또는 "0X"로 시작하는 경우 radix는 16(16진수)이고 문자열의 나머지는 구문 분석됩니다.
- 입력 문자열이 "0"으로 시작하는 경우 radix는 8(옥탈) 또는 10(십진수)입니다.
- 입력 문자열이 다른 값으로 시작하는 경우 기수는 10(십진수)입니다.
정확히 어떤 기수를 선택하는지는 구현에 의존적입니다.ECMA스크립트 5는 10(십진수)이 사용된다고 명시하고 있지만 아직 모든 브라우저가 이를 지원하는 것은 아닙니다.
이러한 이유로 구문 분석을 사용할 때 항상 radix를 지정합니다.인트
regexp:
"014".replace(/^0+/, '')
당신이 왜 이것을 하고 싶은지 확실하지 않습니다.정확한 수치를 얻으려면 unary를 사용할 수 있습니다.[docs]
value = +value;
텍스트 형식만 지정하고 싶다면 regex가 더 나을 수 있습니다.그것은 당신이 대하는 가치관에 달려있습니다.만약 당신이 정수만 가지고 있다면, 그러면.
input.value = +input.value;
그것도 괜찮습니다.물론 부동소수점 값에도 적용되지만 점 뒤에 자리 수가 몇 개인지에 따라 숫자로 변환하고 문자열로 다시 변환하면 (적어도 표시를 위해) 일부를 제거할 수 있습니다.
언급URL : https://stackoverflow.com/questions/6676488/remove-leading-zeros-from-a-number-in-javascript
'programing' 카테고리의 다른 글
shell32.dll에서 아이콘을 어떻게 끄집어내나요? (0) | 2023.09.28 |
---|---|
요청 방법.인증된 작업입니까? (0) | 2023.09.28 |
오류 유형: $.browser가 정의되지 않았습니다. (0) | 2023.09.28 |
글꼴 어썸이 작동하지 않음, 아이콘이 사각형으로 표시됨 (0) | 2023.09.28 |
루프용 자바스크립트를 중지하는 방법? (0) | 2023.09.28 |