programing

자바스크립트의 숫자에서 선행 0 제거

closeapi 2023. 9. 28. 08:24
반응형

자바스크립트의 숫자에서 선행 0 제거

중복 가능:
자바스크립트에서 문자열의 선행 0 자르기

자바스크립트에서 숫자에서 선행 0을 제거하는 가장 간단하고 크로스 브라우저 호환 방법은 무엇입니까?

예를 들어 텍스트 상자 값이 014 또는 065인 경우 14 또는 65만 반환해야 합니다.

우리는 이 변환을 위해 네가지 방법을 사용할 수 있습니다.

  1. radixint 구문 분석 10
  2. 숫자 생성자
  3. 유니리 플러스 연산자
  4. 수학적 함수(감산) 사용

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로 변환할 수 있습니다.numbertype 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

반응형