JavaScript에서 문자열을 정수로 어떻게 변환합니까?
질문자 :
가장 간단한 방법은 기본 Number
함수를 사용하는 것입니다.
var x = Number("1000")
그래도 문제가 해결되지 않으면 parseInt , 단항 플러스 , floor 가 있는 parseFloat 및 Math.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)
Nosredna
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
는 유효한 것을 구문 분석한 후 잘못된 데이터를 무시합니다.
이 guid는 51로 구문 분석합니다.
var result = parseInt('51e3daf6-b521-446a-9f5b-a1bb4d8bac36', 10) == 51; // Returns true
Zanoni
자바스크립트에서 문자열을 숫자로 변환하는 방법은 크게 두 가지가 있습니다. 한 가지 방법은 이를 구문 분석하는 것이고 다른 방법은 해당 유형을 숫자로 변경하는 것입니다. 다른 답변의 모든 트릭(예: 단항 플러스)에는 암시적으로 문자열 유형을 숫자로 강제 변환하는 것이 포함됩니다. Number 함수를 사용하여 명시적으로 동일한 작업을 수행할 수도 있습니다.
파싱
var parsed = parseInt("97", 10);
parseInt 및 parseFloat는 문자열을 숫자로 구문 분석하는 데 사용되는 두 가지 함수입니다. 인식하지 못하는 문자에 도달하면 구문 분석이 자동으로 중지됩니다. 이는 "92px"와 같은 문자열을 구문 분석하는 데 유용할 수 있지만 잘못된 입력에 대해 어떤 종류의 오류도 제공하지 않기 때문에 다소 위험합니다. 문자열이 숫자로 시작하지 않는 한 NaN을 반환합니다. 문자열 시작 부분의 공백은 무시됩니다. 다음은 원하는 것과 다른 작업을 수행하고 아무 것도 잘못되었다는 표시를 하지 않는 예입니다.
var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97
항상 기수를 두 번째 인수로 지정하는 것이 좋습니다. 이전 브라우저에서 문자열이 0으로 시작하면 기수를 지정하지 않으면 8진수로 해석되어 많은 사람들이 놀랐습니다. 16진수의 동작은 기수가 지정되지 않은 경우(예: 0xff
문자열이 0x로 시작하도록 함으로써 트리거됩니다. 표준은 실제로 ecmascript 5로 변경되었으므로 최신 브라우저는 기수가 지정되지 않은 경우 선행 0이 있을 때 더 이상 8진수를 트리거하지 않습니다. parseInt는 기본 36까지의 기수를 이해하며, 이 경우 대문자와 소문자가 모두 동일한 것으로 처리됩니다.
문자열의 유형을 숫자로 변경
parseInt를 사용하지 않는 위에서 언급한 다른 모든 트릭에는 암시적으로 문자열을 숫자로 강제 변환하는 작업이 포함됩니다. 나는 이것을 명시 적으로 수행하는 것을 선호합니다.
var cast = Number("97");
이것은 구문 분석 방법과 다른 동작을 합니다(여전히 공백은 무시하지만). NaN
을 반환하는 것보다 전체 문자열을 이해하지 못하면 97px
와 같은 문자열에 사용할 수 없습니다. Number 래퍼 객체가 아닌 기본 숫자를 원하기 때문에 Number 함수 앞에 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
모든 비트 연산자(여기서는 비트 or를 수행했지만 이전 답변이나 비트 시프트에서와 같이 이중 부정을 수행할 수도 있음)는 값을 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
이지만 구문 분석 방법은 그렇지 않습니다.
관습
이 두 가지 방법 모두 원하는 대로 정확하게 수행할 가능성은 거의 없습니다. 예를 들어 일반적으로 구문 분석이 실패하면 오류가 발생하고 무한대, 지수 또는 선행 공백에 대한 지원이 필요하지 않습니다. 사용 사례에 따라 사용자 지정 변환 함수를 작성하는 것이 합리적일 때가 있습니다.
항상 Number 또는 구문 분석 방법 중 하나의 출력이 예상한 종류의 숫자인지 확인하십시오. isNaN
을 사용하는 것이 거의 확실할 것입니다(일반적으로 구문 분석이 실패했음을 알 수 있는 유일한 방법).
kybernetikos
ParseInt()와 +는 다릅니다.
parseInt("10.3456") // returns 10 +"10.3456" // returns 10.3456
Dalius I
가장 빠른
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'는 가장 빠르고 '숫자'는 가장 느립니다(그러나 결과는 매우 유사합니다. >13,000,000 <31,000,000). 따라서 문자열을 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%). 위의 사진을 업데이트하고 테스트합니다.
Kamil Kiełczewski
오래된 질문이지만 누군가에게 도움이 될 수 있습니다.
나는 문자열을 int 숫자로 변환하는이 방법을 사용합니다.
var str = "25"; // string var number = str*1; // number
따라서 1을 곱해도 값은 변하지 않지만 js는 자동으로 숫자를 반환합니다.
그러나 아래에서 볼 수 있듯이 str
이 숫자(또는 숫자로 표시될 수 있음)라고 확신하는 경우 사용해야 합니다. 그렇지 않으면 숫자가 아닌 NaN을 반환합니다.
예를 들어 사용할 간단한 기능을 만들 수 있습니다.
function toNumber(str) { return str*1; }
dav
parseInt를 시도하십시오.
var number = parseInt("10", 10); //number will have value of 10.
SolutionYogi
여기에 잘못된 답변을 게시했습니다. 죄송합니다. 결정된.
이것은 오래된 질문이지만 나는 이 트릭을 좋아합니다.
~~"2.123"; //2 ~~"5"; //5
이중 비트 음수는 소수점 이하의 모든 항목을 삭제하고 이를 숫자 형식으로 변환합니다. 함수를 호출하는 것보다 약간 빠르다는 말을 들었지만 완전히 확신하지는 못했습니다.
편집: 이 연산자로 숫자를 0으로 이동하면 숫자가 uint32 로 변환된다는 것을 보여주는 여기에서 방금 본 또 다른 방법(0으로 채우기 오른쪽 시프트인 javascript >>> 연산자에 대한 질문) 또한 서명되지 않은 것을 원합니다. 다시 말하지만, 이것은 부호 없는 정수 로 변환되며, 이는 부호 있는 숫자를 사용하는 경우 이상한 동작을 유발할 수 있습니다.
"-2.123" >>> 0; // 4294967294 "2.123" >>> 0; // 2 "-5" >>> 0; // 4294967291 "5" >>> 0; // 5
Ian Ooi
parseInt를 사용하여 부동 소수점을 과학적 표기법으로 변환하는 경우 주의하십시오! 예를 들어:
parseInt("5.6e-14")
결과는
5
대신에
0
tom
String을 Integer로 변환하려면 parseFloat와 NOT 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를 사용하십시오.
Devner
참고로 Mootools에는 모든 기본 문자열(또는 float(또는 정수))에 사용되는 toInt() 함수가 있습니다.
"2".toInt() // 2 "2px".toInt() // 2 2.toInt() // 2
Henrik Hansen
아래 예를 참조하십시오. 의심을 해소하는 데 도움이 될 것입니다.
Example Result parseInt("4") 4 parseInt("5aaa") 5 parseInt("4.33333") 4 parseInt("aaa"); NaN (means "Not a Number")
parseint 함수를 사용하여 문자열이 아닌 정수의 op만 제공합니다.
zeeshan
parseInt(stringOfNumber)
를 사용하는 대신 +(stringOfNumber)
를 사용할 수 있습니다.
예: +("21")
parseInt("21")
처럼 int 21을 반환합니다.
float 구문 분석을 위해 이 단항 "+" 연산자도 사용할 수 있습니다...
RevanthKrishnaKumar V.
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에서 문자열을 숫자로 변환하는 우아한 방법인 +
Alireza
string
을 number
로 변환하려면 str - 0
을 시도하십시오.
> 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
다음은 문자열을 int로 변환하는 여러 방법의 성능을 비교하는 두 개의 링크입니다.
zangw
제 생각에는 부동 소수점을 구문 분석하면 오류가 발생하므로 모든 경우에 대한 답변은 없습니다.
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
Michał Knapik
가장 쉬운 해결책은 다음과 같습니다.
let myNumber = "123" | 0;
더 쉬운 솔루션
let myNumber = +"123";
Thanveer Shah
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; }
kungfooman
또 다른 옵션은 값을 자체적으로 두 배로 늘리는 것입니다.
var i = 12.34; console.log('i = ' + i); console.log('i ⊕ i ⊕ i = ' + (i ^ i ^ i));
그러면 다음이 출력됩니다.
i = 12.34 i ⊕ i ⊕ i = 12
BanksySan
문자열 앞에 하나의 더하기(+)만 추가했는데 그것이 해결책이었습니다!
+"052254" //52254
도움이 되기를 바랍니다 ;)
حضور و غیاب با نرم افزار
10의 거듭제곱으로 숫자의 곱셈을 합산하면 다음과 같습니다.
예: 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;
}
Javier Giovannini
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); }
mhenry1384
플러스를 사용할 수 있습니다. 예를 들어:
var personAge = '24'; var personAge1 = (+personAge)
typeof personAge1
새 변수의 유형을 볼 수 있습니다. number
입니다.
elnaz nasiri
Javascript에서는 다음을 수행할 수 있습니다.
구문 분석
parseInt("10.5") //returns 10
1로 곱하기
var s = "10"; s = s*1; //returns 10
단항 연산자(+) 사용
var s = "10"; s = +s; //returns 10
비트 연산자 사용
2140000000
이후에 끊기 시작합니다. 예:- ~~"2150000000" = -2144967296
)
var s= "10.5"; s = ~~s; //returns 10
Math.floor() 또는 Math.ceil() 사용
var s = "10"; s = Math.floor(s) || Math.ceil(s); //returns 10
TechySharnav
위의 모든 것이 맞습니다. "typeot x === 'number'"를 수행하여 이것이 문자열의 숫자인지 확인하십시오. 그렇지 않으면 NaN이 반환됩니다.
var num = "fsdfsdf242342"; typeof num => 'string'; var num1 = "12423"; typeof num1 => 'number'; +num1 = > 12423`
Shahar ドーン Levi
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>
Majid Nayyeri
나는 이것을 사용한다
String.prototype.toInt = function (returnval) { var i = parseInt(this); return isNaN(i) ? returnval !== undefined ? returnval : - 1 : i; }
이런 식으로 나는 항상 int를 얻습니다.
Mike
유효한 정수를 얻는 가장 안전한 방법:
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
Ofir
이것은 (아마도) 정수 구문 분석 을 위한 최상의 솔루션은 아니지만 정수를 "추출"해야 하는 경우 예를 들면 다음과 같습니다.
"1a2b3c" === 123 "198some text2hello world!30" === 198230 // ...
이것은 작동합니다(정수에만 해당).
var str = '3a9b0c3d2e9f8g' function extractInteger(str) { var result = 0; var factor = 1 for (var i = str.length; i > 0; i--) { if (!isNaN(str[i - 1])) { result += parseInt(str[i - 1]) * factor factor *= 10 } } return result } console.log(extractInteger(str))
물론 이것은 정수 구문 분석에도 작동하지만 다른 방법보다 느립니다.
이 방법으로 정수를 구문 분석하고 문자열이 숫자가 아닌 경우 NaN
반환할 수도 있지만 내부적 parseInt
parseInt
가 더 빠르기 때문에 왜 원하는지 모르겠습니다.
var str = '3a9b0c3d2e9f8g' function extractInteger(str) { var result = 0; var factor = 1 for (var i = str.length; i > 0; i--) { if (isNaN(str[i - 1])) return NaN result += parseInt(str[i - 1]) * factor factor *= 10 } return result } console.log(extractInteger(str))
GalaxyCat105
가장 쉬운 방법은 다음과 같이 +를 사용하는 것입니다.
const strTen = "10" const numTen = +strTen // string to number conversion console.log(typeof strTen) // string console.log(typeof numTen) // number
Sandeep Amarnath
출처 : http:www.stackoverflow.com/questions/1133770/how-to-convert-a-string-to-an-integer-in-javascript
'etc. > StackOverFlow' 카테고리의 다른 글
SQL Server DateTime 데이터 유형에서 날짜만 반환하는 방법 (0) | 2021.12.04 |
---|---|
Vim은 마지막 검색 강조 표시를 지웁니다. (0) | 2021.12.04 |
Bash에서 명령의 출력에 변수를 어떻게 설정합니까? (0) | 2021.12.04 |
제어 역전이란 무엇입니까? (0) | 2021.12.04 |
AngularJS에서 데이터 바인딩은 어떻게 작동합니까? (0) | 2021.12.04 |