문제

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

도움이 되었습니까?

해결책

가장 간단한 방법은 네이티브를 사용하는 것입니다 Number 기능:

var x = Number("1000")

그것이 당신을 위해 효과가 없다면 parseint, Unary Plus, 바닥이있는 parsefloat, 그리고 수학 행동 양식.

Parseint :

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])

Unary Plus 스트링이 이미 정수 형태 인 경우 :

var x = +"1000";

문자열이 플로트이거나 플로트가 될 수 있고 정수를 원한다면 :

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

또는 수학을 여러 번 사용하려는 경우 :

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

Parseint에 전화 할 때 radix를 넣는 것을 잊어 버린 유형이라면 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 번 반환됩니다. 따라서 Radix (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

JavaScript의 문자열을 숫자로 변환하는 두 가지 주요 방법이 있습니다. 한 가지 방법은 구문 분석하는 것이며 다른 방법은 유형을 숫자로 변경하는 것입니다. 다른 답변 (예 : Unary Plus)의 모든 트릭에는 문자열의 유형을 숫자로 암시 적으로 강요하는 것이 포함됩니다. 숫자 함수로 명시 적으로 동일한 작업을 수행 할 수도 있습니다.

구문 분석

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

parseint와 parsefloat는 문자열을 숫자로 구문 분석하는 데 사용되는 두 가지 기능입니다. 구문 분석은 인식하지 못하는 캐릭터에 부딪히면 조용히 멈출 것입니다. "92px"와 같은 문자열을 구문 분석하는 데 유용 할 수 있지만, 잘못된 입력에 대한 오류는 대신에, 대신 당신이 대신 당신에게 다소 위험합니다. '문자열이 숫자로 시작하지 않는 한 NAN을 다시 얻을 수 있습니다. 문자열의 시작 부분에있는 공백은 무시됩니다. 다음은 원하는 것과 다른 일을하고 어떤 일이 잘못되었다는 것을 나타내는 예입니다.

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

항상 두 번째 인수로 radix를 지정하는 것이 좋습니다. 구형 브라우저에서 문자열이 0으로 시작되면 Radix가 지정되지 않은 경우 많은 사람들을 놀라게했습니다. radix가 지정되지 않으면 문자열이 0x로 시작하도록하여 16 진수의 동작이 트리거됩니다. 0xff. 표준은 실제로 ECMAScript 5로 변경되었으므로 RADIX가 지정되지 않은 경우 주요 0이있을 때 최신 브라우저가 더 이상 Octal을 트리거하지 않습니다. Parseint는 최대 36의 라드 딕스를 이해하며,이 경우 상단 및 소문자 모두 동등한 것으로 취급됩니다.

문자열 유형을 숫자로 변경합니다

parseint를 사용하지 않는 위에서 언급 한 다른 모든 트릭은 끈을 숫자로 암시 적으로 강요하는 것을 포함합니다. 나는 이것을 명시 적으로 선호합니다.

var cast = Number("97");

이것은 구문 분석 방법과 다른 동작을 가지고 있습니다 (여전히 공백은 무시하지만). 더 엄격합니다 : 문자열 전체를 이해하지 못하면 돌아 오는 것보다 문자열 전체를 이해하지 못하면 NaN, 당신은 문자열과 같은 문자열에 사용할 수 없습니다 97px. 숫자 래퍼 객체보다는 원시 번호를 원하기 때문에 new 숫자 함수 앞에서.

분명히, 숫자로 변환하면 정수가 아닌 플로트가 될 수있는 값을 제공하므로 정수를 원한다면 수정해야합니다. 이 작업을 수행하는 몇 가지 방법이 있습니다.

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 ~이다 200 Nan보다는. 또한 숫자는 "무한대"를 이해하지만 구문 분석 방법은 그렇지 않습니다.

관습

이 방법 중 하나가 원하는 것을 정확하게 수행 할 가능성은 거의 없습니다. 예를 들어, 구문 분석이 실패하면 오류가 발생하고 무한대, 지수 또는 선행 공백을 지원할 필요가 없습니다. Usecase에 따라 때로는 사용자 정의 변환 기능을 작성하는 것이 합리적입니다.

숫자의 출력 또는 구문 분석 방법 중 하나가 예상되는 숫자의 종류인지 항상 확인하십시오. 당신은 거의 확실하게 사용하고 싶을 것입니다 isNaN 숫자가 NAN이 아닌지 확인하기 위해 (일반적으로 구문 분석이 실패했음을 알게 된 유일한 방법).

parseint ()와 +는 다릅니다

parseInt("10.3456") // returns 10

+"10.3456" // returns 10.3456

오래된 질문이지만 아마도 누군가에게 도움이 될 수 있습니다.

문자열을 변환하는이 방법을 사용합니다 int 숫자

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

따라서 1을 곱하면 값이 변경되지 않지만 JS는 자동으로 숫자를 반환합니다.

그러나 아래에 표시된 것처럼, 이것은 당신이 str 숫자 (또는 숫자로 표시 될 수 있음), 그렇지 않으면 숫자가 아닌 NAN을 반환합니다.

예를 들어 간단한 기능을 만들 수 있습니다

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

enter image description here

parseint를 사용해보십시오.

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

가장 빠른

var x = "1000"*1;

테스트

속도에 대한 비교가 거의 없습니다 (Mac OS 만 해당) ... :)

Chrome 'plus'및 'mul'은 가장 빠르며 (> 700,000,00 op/sec), 'Math.floor'는 가장 느립니다. Firefox의 경우 'Plus'는 가장 느립니다 (!) 'mul'은 가장 빠릅니다 (> 900,000,000 op/sec). Safari에서 'parseint'는 금식, '숫자'는 가장 느립니다 (그러나 결과는 매우 유사합니다.> 13,000,000 <31,000,000). 따라서 Cast String to Int의 Safari는 다른 브라우저보다 10 배 이상 느립니다. 그래서 승자는 '' :)

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

enter image description here

업데이트

나도 테스트합니다 var x = ~~"1000"; - Chrome과 Safari에서 var x = "1000"*1 (<1%), Firefox에서 약간 더 빠릅니다 (<1%). 위의 그림과 테스트를 업데이트합니다

여기에 잘못된 대답을 게시했습니다. 죄송합니다. 결정된.

이것은 오래된 질문이지만 나는이 트릭을 좋아합니다.

~~"2.123"; //2
~~"5"; //5

이중 비트 비트 음수는 소수점 이후로 무엇이든 떨어지고 숫자 형식으로 변환합니다. 나는 그것이 기능을 호출하는 것보다 약간 빠르다고 들었지만, 전적으로 확신하지는 않습니다.

편집 : 방금 본 또 다른 방법 여기 (JavaScript >>> 연산자에 대한 질문은 제로 필시 오른쪽 시프트입니다. UINT32 당신이 그것을 원한다면 좋은 일입니다 서명되지 않았습니다. 다시, 이것은 An으로 변환됩니다 서명되지 않은 정수, 서명 번호를 사용하면 이상한 행동으로 이어질 수 있습니다.

"-2.123" >>> 0; // 4294967294
"2.123" >>> 0; // 2
"-5" >>> 0; // 4294967291
"5" >>> 0; // 5

Parseint를 사용하여 과학 표기법으로 플로트를 변환하는 경우주의하십시오! 예를 들어:

parseInt("5.6e-14") 

결과가 나옵니다

5 

대신에

0

또한 사이드 참고로 : mootools는 모든 기본 문자열 (또는 float (또는 정수))에 사용되는 함수 toint ()가 있습니다.

"2".toInt()   // 2
"2px".toInt() // 2
2.toInt()     // 2

문자열을 정수로 변환하려면 parsefloat를 사용하는 것이 좋습니다. 아니다 parseint. 이유는 다음과 같습니다.

parsefloat 사용 :

parseFloat('2.34cms')  //Output: 2.34
parseFloat('12.5')     //Output: 12.5
parseFloat('012.3')    //Output: 12.3

Parseint 사용 :

parseInt('2.34cms')  //Output: 2
parseInt('12.5')     //Output: 12
parseInt('012.3')    //Output: 12

따라서 Parseint가 소수점 후에 값을 버린다는 것을 알게되면 Parsefloat를 사용하면 부동 소수점 번호로 작업 할 수 있으므로 소수 후에 값을 유지하려면 더 적합합니다. 정수 값을 원하는 경우에만 Parseint를 사용하십시오.

아래 예제를 참조하십시오.

Example                  Result

parseInt("4")            4
parseInt("5aaa")         5
parseInt("4.33333")      4
parseInt("aaa");         NaN (means "Not a Number")

parseint 함수를 사용하면 정수가 아닌 Op of Integer가 제공됩니다.

우리는 사용할 수 있습니다 +(stringOfNumber) 사용하는 대신 parseInt(stringOfNumber)

전: +("21") int를 21로 반환합니다 parseInt("21").

플로트를 구문 분석하기 위해이 외교 "+"연산자를 사용할 수 있습니다 ...

노력하다 str - 0 변환하다 string 에게 number.

> str = '0'
> str - 0
  0
> str = '123'
> str - 0
  123
> str = '-12'
> str - 0
  -12
> str = 'asdf'
> str - 0
  NaN
> str = '12.34'
> str - 0
  12.34

다음은 String을 int로 변환하는 몇 가지 방법의 성능을 비교하는 두 가지 링크입니다.

https://jsperf.com/number-vs-parseint-vs-plus

http://phrogz.net/js/string_to_number.html

JavaScript에는 문자열을 숫자 값으로 변환하는 방법이 여러 가지가 있습니다. 단순하고 편리한 방법으로 귀하에게 적합한 방식을 선택하십시오.

var num = Number("999.5"); //999.5
var num = parseInt("999.5", 10); //999
var num = parseFloat("999.5"); //999.5
var num = +"999.5"; //999.5

또한 수학 작업은 예를 들어 숫자로 변환합니다 ...

var num = "999.5" / 1; //999.5
var num = "999.5" * 1; //999.5
var num = "999.5" - 1 + 1; //999.5
var num = "999.5" - 0; //999.5
var num = Math.floor("999.5"); //999
var num = ~~"999.5"; //999

내 선호하는 방법은 사용 중입니다 + 사인, 이것은 문자열을 JavaScript의 숫자로 변환하는 우아한 방법입니다.

내 생각에, 부유물을 구문 분석하면 오류가 발생하기 때문에 모든 엣지 케이스를 다루지 않습니다.

function parseInteger(value) {
    if(value === '') return NaN;
    const number = Number(value);
    return Number.isInteger(number) ? number : NaN;
}
parseInteger("4")            // 4
parseInteger("5aaa")         // NaN
parseInteger("4.33333")      // NaN
parseInteger("aaa");         // NaN

Google은 결과적 으로이 답변을 주 셨습니다.

실제로 C와 JavaScript 사이의 바인딩을 위해 정수로 문자열을 "저장"해야했기 때문에 문자열을 정수 값으로 변환했습니다.

/*
    Examples:
        int2str( str2int("test") ) == "test" // true
        int2str( str2int("t€st") ) // "t¬st", because "€".charCodeAt(0) is 8364, will be AND'ed with 0xff
    Limitations:
        max 4 chars, so it fits into an integer
*/
function str2int(the_str) {
    var ret = 0;
    var len = the_str.length;
    if (len >= 1) ret += (the_str.charCodeAt(0) & 0xff) <<  0;
    if (len >= 2) ret += (the_str.charCodeAt(1) & 0xff) <<  8;
    if (len >= 3) ret += (the_str.charCodeAt(2) & 0xff) << 16;
    if (len >= 4) ret += (the_str.charCodeAt(3) & 0xff) << 24;
    return ret;
}
function int2str(the_int) {
    var tmp = [
        (the_int & 0x000000ff) >>  0,
        (the_int & 0x0000ff00) >>  8,
        (the_int & 0x00ff0000) >> 16,
        (the_int & 0xff000000) >> 24
    ];
    var ret = "";
    for (var i=0; i<4; i++) {
        if (tmp[i] == 0)
            break;
        ret += String.fromCharCode(tmp[i]);
    }
    return ret;
}

위의 모든 것이 정확합니다. "Typeot x === 'number'를 수행하여 문자열의 숫자인지 확인하십시오.

 var num = "fsdfsdf242342";
 typeof num => 'string';

 var num1 = "12423";
 typeof num1 => 'number';
 +num1 = > 12423`

또 다른 옵션은 값을 자체로 두 배로 두는 것입니다.

var i = 12.34;
console.log('i = ' + i);
console.log('i ⊕ i ⊕ i = ' + (i ^ i ^ i));

이것은 출력됩니다 :

i = 12.34
i ⊕ i ⊕ i = 12

function doSth(){
  var a = document.getElementById('input').value;
  document.getElementById('number').innerHTML = toNumber(a) + 1;
}
function toNumber(str){
  return +str;
}
<input id="input" type="text">
<input onclick="doSth()" type="submit">
<span id="number"></span>

나는 이것을 사용한다

String.prototype.toInt = function (returnval) { 
    var i = parseInt(this);
    return isNaN(i) ? returnval !== undefined ? returnval : - 1  :      i; 
}

이런 식으로 나는 항상 int를 되 찾는다.

스트링 전에 하나의 플러스 (+) 만 추가했는데 솔루션이었습니다!

+"052254" //52254

도움이되기를 바랍니다;)

숫자의 곱셈을 각각의 힘으로 10의 힘으로 합산합니다.

IE : 123 = 100 + 20 + 3 = 1*100 + 2 + 10 + 3*1 = 1*(10^2) + 2*(10^1) + 3*(10^0)

function atoi(array) {

// use exp as (length - i), other option would be to reverse the array.
// multiply a[i] * 10^(exp) and sum

let sum = 0;

for (let i = 0; i < array.length; i++) {
    let exp = array.length-(i+1);
    let value = array[i] * Math.pow(10,exp);
    sum+=value;
}

return sum;

}

다음은 가장 쉬운 솔루션입니다

let myNumber = "123" | 0;

유효한 정수를 얻는 가장 안전한 방법 :

let integer = (parseInt(value, 10) || 0);

예 :

// Example 1 - Invalid value:
let value = null;
let integer = (parseInt(value, 10) || 0);
// => integer = 0
// Example 2 - Valid value:
let value = "1230.42";
let integer = (parseInt(value, 10) || 0);
// => integer = 1230
// Example 3 - Invalid value:
let value = () => { return 412 };
let integer = (parseInt(value, 10) || 0);
// => integer = 0
function parseIntSmarter(str) {
    // ParseInt is bad because it returns 22 for "22thisendsintext"
    // Number() is returns NaN if it ends in non-numbers, but it returns 0 for empty or whitespace strings.
    return isNaN(Number(str)) ? NaN : parseInt(str, 10);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top