[javascript] JavaScript에서 문자열을 정수로 변환하는 방법은 무엇입니까?

JavaScript에서 문자열을 정수로 어떻게 변환합니까?



답변

가장 간단한 방법은 기본 Number함수 를 사용하는 것입니다 .

var x = Number("1000")

이것이 효과가 없다면 parseInt , 단항 더하기 , parseFloat with floorMath.round 메소드가 있습니다.

파싱 ​​:

var x = parseInt("1000", 10); // you want to use radix 10
    // so you get a decimal number even with a leading 0 and an old browser ([IE8, Firefox 20, Chrome 22 and older][1])

문자열이 이미 정수 형식 인 경우 단항 플러스 :

var x = +"1000";

문자열이 float이거나 float 일 수 있고 정수를 원하는 경우 :

var x = Math.floor("1000.01"); //floor automatically converts string to number

또는 Math.floor를 여러 번 사용하려는 경우 :

var floor = Math.floor;
var x = floor("1000.01");

parseInt를 호출 할 때 기수를 입력하는 것을 잊어 버린 유형이라면 parseFloat를 사용하고 원하는대로 반올림 할 수 있습니다. 여기서는 바닥을 사용합니다.

var floor = Math.floor;
var x = floor(parseFloat("1000.01"));

흥미롭게도 Math.round (Math.floor와 같은)는 문자열을 숫자로 변환하므로 숫자를 반올림하거나 문자열에 정수가있는 경우 가장 좋은 방법 일 것입니다.

var round = Math.round;
var x = round("1000"); //equivalent to round("1000",0)


답변

parseInt 함수를 사용해보십시오.

var number = parseInt("10");

그러나 문제가 있습니다. parseInt 함수를 사용하여 “010”을 변환하려고하면 8 진수로 감지되고 숫자 8을 리턴합니다. 따라서 기수 (2-36)를 지정해야합니다. 이 경우베이스 10.

parseInt(string, radix)

예:

var result = parseInt("010", 10) == 10; // Returns true

var result = parseInt("010") == 10; // Returns false

parseInt유효한 것을 구문 분석 한 후 잘못된 데이터 를 무시합니다.
이 안내는 51로 구문 분석됩니다.

var result = parseInt('51e3daf6-b521-446a-9f5b-a1bb4d8bac36', 10) == 51; // Returns true


답변

자바 스크립트에서 문자열을 숫자로 변환하는 두 가지 주요 방법이 있습니다. 한 가지 방법은 구문 분석하고 다른 방법은 유형을 숫자로 변경하는 것입니다. 다른 답변 (예 : 단항 더하기)의 모든 트릭은 문자열 유형을 숫자로 암시 적으로 강제하는 것과 관련이 있습니다. Number 함수를 사용하여 동일한 작업을 명시 적으로 수행 할 수도 있습니다.

파싱

var parsed = parseInt("97", 10);

parseInt 및 parseFloat는 문자열을 숫자로 구문 분석하는 데 사용되는 두 가지 함수입니다. 인식 할 수없는 문자에 맞으면 구문 분석이 자동으로 중지됩니다. “92px”와 같은 문자열을 구문 분석하는 데 유용 할 수 있지만 입력이 잘못되면 오류가 발생하지 않으므로 다소 위험합니다. 문자열이 숫자로 시작하지 않으면 NaN이 다시 나타납니다. 문자열 시작 부분의 공백은 무시됩니다. 다음은 원하는 것과 다른 것을 수행하고 문제가 있음을 나타내지 않는 예입니다.

var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97

기수를 항상 두 번째 인수로 지정하는 것이 좋습니다. 구식 브라우저에서 문자열이 0으로 시작하면 기수가 지정되지 않으면 많은 사람들을 놀라게했을 경우 8 진수로 해석됩니다. 기수가 지정되지 않은 경우 문자열을 0x로 시작하면 16 진수의 동작이 트리거됩니다 (예 🙂 0xff. 표준은 실제로 ecmascript 5로 변경되었으므로 최신 브라우저는 기수가 지정되지 않은 경우 앞에 0이 있으면 더 이상 8 진수를 트리거하지 않습니다. parseInt는 밑이 36 인 기수를 이해하며,이 경우 대문자와 소문자가 모두 동등한 것으로 취급됩니다.

문자열 유형을 숫자로 변경

위에서 언급 한 parseInt를 사용하지 않는 다른 모든 트릭은 문자열을 숫자로 암시 적으로 강제하는 것과 관련이 있습니다. 나는 이것을 명시 적으로하는 것을 선호합니다.

var cast = Number("97");

구문 분석 방법에는 다른 동작이 있습니다 (여전히 공백은 무시하지만). 더 엄격합니다 : 반환하는 것보다 전체 문자열을 이해하지 못하면 NaN같은 문자열에 사용할 수 없습니다 97px. Number 래퍼 객체 대신 기본 숫자를 원하므로 newNumber 함수 앞에 두지 마십시오 .

분명히 숫자로 변환하면 정수가 아니라 부동 소수점 값이 될 수 있으므로 정수를 원하면 수정해야합니다. 이를 수행하는 몇 가지 방법이 있습니다.

var rounded = Math.floor(Number("97.654"));  // other options are Math.ceil, Math.round
var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
var bitwised = Number("97.654")|0;  // do not use for large numbers

모든 비트 연산자 (여기서는 비트 단위로 수행했지만 이전 답변이나 비트 시프트에서와 같이 이중 부정을 수행 할 수 있음)는 값을 32 비트 정수로 변환하고 대부분은 부호있는 정수로 변환합니다. 이것은 큰 정수를 원하지 않을 것 입니다. 정수를 32 비트로 표현할 수 없으면 랩핑됩니다.

~~"3000000000.654" === -1294967296
// This is the same as
Number("3000000000.654")|0
"3000000000.654" >>> 0 === 3000000000 // unsigned right shift gives you an extra bit
"300000000000.654" >>> 0 === 3647256576 // but still fails with larger numbers

더 큰 숫자를 올바르게 사용하려면 반올림 방법을 사용해야합니다

Math.floor("3000000000.654") === 3000000000
// This is the same as
Math.floor(Number("3000000000.654"))

이러한 방법의 모든 지수 표기법을 이해 명심, 그래서 2e2이다 200NaN이보다는. 또한 Number는 “무한대”를 이해하지만 구문 분석 방법은 그렇지 않습니다.

커스텀

이러한 방법 중 하나가 원하는 것을 정확하게 수행하지는 않습니다. 예를 들어, 일반적으로 구문 분석이 실패하면 오류가 발생하고 무한대, 지수 또는 선행 공백을 지원할 필요가 없습니다. 사용 사례에 따라 때로는 사용자 정의 변환 함수를 작성하는 것이 좋습니다.

항상 Number 또는 구문 분석 방법 중 하나의 출력이 예상되는 숫자인지 확인하십시오. 거의 확실하게 isNaN숫자가 NaN이 아닌지 확인하는 데 사용하려고 할 것입니다 (일반적으로 구문 분석이 실패한 것을 알 수있는 유일한 방법).


답변

ParseInt ()와 +가 다릅니다

parseInt("10.3456") // returns 10

+"10.3456" // returns 10.3456


답변

가장 빠른

var x = "1000"*1;

테스트

속도에 대한 비교는 거의 없습니다 (Mac Os 만 해당) … 🙂

크롬 ‘plus’와 ‘mul’이 가장 빠르면 (> 700,000,00 op / sec) ‘Math.floor’가 가장 느립니다. Firefox의 경우 ‘plus’가 가장 느립니다 (!) ‘mul’이 가장 빠릅니다 (> 900,000,000 op / sec). Safari에서 ‘parseInt’는 빠르지 만 ‘number’는 가장 느립니다 (그러나 결과는 매우 유사합니다. 따라서 캐스트 문자열을 int로 사용하는 Safari는 다른 브라우저보다 10 배 이상 느립니다. 그래서 승자는 ‘ mul ‘입니다 🙂

이 링크 https://jsperf.com/js-cast-str-to-number/1 링크를 사용하여 브라우저에서 실행할 수 있습니다

여기에 이미지 설명을 입력하십시오

최신 정보

나도 테스트 var x = ~~"1000";-Chrome에서 Safari는 var x = "1000"*1(<1 %) 보다 약간 느리고 Firefox에서는 조금 더 빠릅니다 (<1 %). 위의 그림을 갱신 해 테스트


답변

오래된 질문이지만 어쩌면 이것은 누군가에게 도움이 될 수 있습니다.

이 방법으로 문자열을 int 숫자 로 변환합니다.

var str = "25";       // string
var number = str*1;   // number

따라서 1을 곱해도 값은 변경되지 않지만 js는 자동으로 숫자를 반환합니다.

그러나 아래에 표시된 것처럼 str숫자가 숫자 (또는 숫자로 표시 될 수 있음) 라고 확신하면 사용해야합니다 . 그렇지 않으면 숫자가 아닌 NaN을 반환합니다.

사용할 간단한 함수를 만들 수 있습니다. 예 :

function toNumber(str) {
   return str*1;
}

여기에 이미지 설명을 입력하십시오


답변

parseInt를 시도하십시오.

var number = parseInt("10", 10); //number will have value of 10.