Frontend ๐Ÿ“š/JavaScript

[JS] parseInt() ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

leejaejae 2023. 11. 30. 16:37

์˜ค๋Š˜์€ ์ž๋ฐ”์Šคํฌ๋ฆฝ์˜ parseInt() ํ•จ์ˆ˜์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด์ž.

parseInt() ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด ์ธ์ž๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ํŠน์ • ์ง„์ˆ˜์˜ ์ •์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
(ํŒŒ์‹ฑ์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ•ด ๋ถ„์„ํ•ด์„œ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์กฐ๋ฆฝํ•˜๊ณ  ๋‹ค์‹œ ๋นผ๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ)

๊ตฌ๋ฌธ

parseInt(string);
parseInt(string, radix);

 

๋งค๊ฐœ๋ณ€์ˆ˜

string
ํŒŒ์‹ฑํ•  ๊ฐ’์ด๋‹ค. ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ๊ฒฝ์šฐ toString ์ถ”์ƒ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•ด ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•  ๊ฒƒ์ด๋‹ค. ๋ฌธ์ž์—ด์˜ ์„ ํ–‰ ๊ณต๋ฐฑ์€ ๋ฌด์‹œํ•œ๋‹ค.

radix
string์˜ ์ง„์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 2๋ถ€ํ„ฐ 36๊นŒ์ง€์˜ ์ •์ˆ˜์ด๋‹ค. ์ฃผ์˜! ๊ธฐ๋ณธ ๊ฐ’์ด 10์ด ์•„๋‹ˆ๋‹ค! Number ์ž๋ฃŒํ˜•์ด ์•„๋‹Œ ๊ฒฝ์šฐ Number๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

 

๋ฐ˜ํ™˜ ๊ฐ’

์ฃผ์–ด์ง„ string์—์„œ ํŒŒ์‹ฑํ•œ ์ •์ˆ˜์ด๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” NaN์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • radix๊ฐ€ 2๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ 36๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ.
  • ๊ณต๋ฐฑ์ด ์•„๋‹Œ ์ฒซ ๋ฌธ์ž๋ฅผ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ.

 

์„ค๋ช…

  • parseInt ํ•จ์ˆ˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๊ทธ ๊ฐ’์„ ํŒŒ์‹ฑํ•˜์—ฌ ์ •์ˆ˜๋‚˜ NaN์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • NaN์„ ๋ฐ˜ํ™˜ํ•  ๊ฒƒ์ด ์•„๋‹ˆ๋ฉด, parseInt๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ž๊ฐ€ ์ง€์ •ํ•œ radix์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•œ ์ •์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด radix๊ฐ€ 10์ธ ๊ฒฝ์šฐ 10์ง„์ˆ˜, 8์ธ ๊ฒฝ์šฐ๋Š” 8์ง„์ˆ˜ ๋“ฑ๋“ฑ์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  • radix๊ฐ€ 10์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ, ์˜๋ฌธ ์•ŒํŒŒ๋ฒณ์ด 9๋ณด๋‹ค ํฐ ์ˆซ์ž๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฆ‰, 16์ง„์ˆ˜์—์„œ๋Š” A๋ถ€ํ„ฐ F๊นŒ์ง€๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๋งŒ์•ฝ parseInt ํ•จ์ˆ˜๊ฐ€ ์ง€์ •ํ•œ radix์—์„œ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๋ฅผ ๋งˆ์ฃผ์น˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฌธ์ž ์ด์ „๊นŒ์ง€์˜ ๋ฌธ์ž๋งŒ ์‚ฌ์šฉํ•ด ํŒŒ์‹ฑํ•˜๋ฉฐ ๋ฌธ์ œ์˜ ๋ฌธ์ž์™€ ๊ทธ ์ดํ›„๋Š” ๋ชจ๋‘ ๋ฌด์‹œํ•œ๋‹ค. parseInt๋Š” ์ •์ˆ˜๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์†Œ์ˆ˜์  ์ดํ•˜ ๊ฐ’์„ ์ž˜๋ผ๋‚ด๊ณ , ์„ ํ–‰ ๋ฐ ํ›„ํ–‰ ๊ณต๋ฐฑ์€ ํ—ˆ์šฉ๋œ๋‹ค.

  • ์ผ๋ถ€ ์ˆซ์ž๋Š” ๋ฌธ์ž์—ด ํ‘œํ˜„์— e ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—(6.022e23(6.022 × 10^23)์ฒ˜๋Ÿผ), parseInt๋ฅผ ๋งค์šฐ ํฌ๊ฑฐ๋‚˜ ์ž‘์€ ์ˆซ์ž์˜ ์†Œ์ˆ˜์  ์ดํ•˜ ๊ฐ’์„ ์ž๋ฅด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉด ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. 
    ๊ทธ๋ž˜์„œ parseInt๋ฅผ Math.floor()์˜ ๋Œ€์ฒดํ’ˆ์œผ๋กœ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

  • parseInt ๋Š” ์–‘์˜ ๋ถ€ํ˜ธ(+)์™€ ์Œ์˜ ๋ถ€ํ˜ธ(-)๋ฅผ ์ธ์‹ํ•œ๋‹ค.
    ๋ถ€ํ˜ธ ์ธ์‹์€ ์„ ํ›„ํ–‰ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•œ ํ›„ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋กœ์„œ ์ˆ˜ํ–‰๋˜๋ฉฐ, ๋ถ€ํ˜ธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ๋ถ€ํ˜ธ๋ฅผ ์ฐพ์€ ๊ฒฝ์šฐ ๋ถ€ํ˜ธ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ์ˆซ์ž ํŒŒ์‹ฑ์„ ์ง„ํ–‰ํ•œ๋‹ค.

  • ์ •์ˆ˜ ์ธ์ž๋กœ ์ง€์ •ํ•œ ๊ฐ’์€ (ํ•„์š”ํ•œ ๊ฒฝ์šฐ) ์ˆซ์ž๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
    ๋ณ€ํ™˜ ํ›„์˜ ๊ฐ’์ด 0, NaN, Infinity ์ค‘ ํ•˜๋‚˜(undefined๋Š” NaN์œผ๋กœ ๋ณ€ํ™˜)ํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค์Œ์„ ๊ฐ€์ •ํ•œ๋‹ค.
    1. ์ž…๋ ฅ ๊ฐ’์ด "0x" ๋˜๋Š” "0X"(0๊ณผ ๋Œ€/์†Œ๋ฌธ์ž X)๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ radix๋ฅผ 16์œผ๋กœ ๊ฐ„์ฃผ๋ผ์—ฌ ๋‚˜๋จธ์ง€ ๋ฌธ์ž์—ด์„ 16์ง„์ˆ˜๋กœ ํŒŒ์‹ฑํ•œ๋‹ค.
    2. ์ž…๋ ฅ ๊ฐ’์ด ๊ทธ ์™ธ์˜ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์‹œ์ž‘ํ•˜๋ฉด radix๋Š” 10(10์ง„์ˆ˜)์ด๋‹ค.
    ์ด์™ธ์— ์ง„์ˆ˜ ๊ฐ’์ด [2, 36]์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ parseInt๊ฐ€ NaN์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์˜ˆ์ œ

// 15 ๋ฐ˜ํ™˜
parseInt("0xF", 16);
parseInt("F", 16);
parseInt("17", 8);
parseInt(15.99, 10);
parseInt("1111", 2);
parseInt("15e2", 10);

// NaN ๋ฐ˜ํ™˜
parseInt("Hello", 8); // ์ˆซ์ž๊ฐ€ ์ „ํ˜€ ์•„๋‹˜
parseInt("546", 2); // 0๊ณผ 1์„ ์ œ์™ธํ•œ ์ˆซ์ž๋Š” 2์ง„๋ฒ•์—์„œ ์œ ํšจํ•˜์ง€ ์•Š์Œ

// -15 ๋ฐ˜ํ™˜
parseInt("-0F", 16);
parseInt(-15.1, 10);
parseInt("-17", 8);
parseInt("-1111", 2);
parseInt("-15e1", 10);

// 4 ๋ฐ˜ํ™˜
parseInt(4.7, 10);
parseInt(4.7 * 1e22, 10); // ๋งค์šฐ ํฐ ์ˆซ์ž๊ฐ€ 4๊ฐ€ ๋จ
parseInt(0.00000000000434, 10); // ๋งค์šฐ ์ž‘์€ ์ˆซ์ž๊ฐ€ 4๊ฐ€ ๋จ

// 1 ๋ฐ˜ํ™˜: ์ˆซ์ž๊ฐ€ 1e+21์„ ์ดˆ๊ณผํ•˜๊ฑฐ๋‚˜ 1e-7 ๋ฏธ๋งŒ์ด ๊ฒฝ์šฐ
parseInt(0.0000001, 10);
parseInt(1e-7, 10);
parseInt(123000000000000000000000, 10);

์ง„์ˆ˜๋Š” Number๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

const obj = {
  valueOf() {
    return 8;
  },
};
parseInt("11", obj); // 9

obj.valueOf = function () {
  return 1;
};
parseInt("11", obj); // NaN

obj.valueOf = function () {
  return Infinity;
};
parseInt("11", obj); // 11

 

๋” ์—„๊ฒฉํ•œ ํŒŒ์‹ฑ ํ•จ์ˆ˜

// ์ •๊ทœ ํ‘œํ˜„์‹ ์‚ฌ์šฉ

function filterInt(value) {
  if (/^[-+]?(\d+|Infinity)$/.test(value)) {
    return Number(value);
  } else {
    return NaN;
  }
}

console.log(filterInt("421")); // 421
console.log(filterInt("-421")); // -421
console.log(filterInt("+421")); // 421
console.log(filterInt("Infinity")); // Infinity
console.log(filterInt("421e+0")); // NaN
console.log(filterInt("421hop")); // NaN
console.log(filterInt("hop1.61803398875")); // NaN
console.log(filterInt("1.61803398875")); // NaN

 

์ฐธ๊ณ 

parseInt() - javascript | MDN

 

'Frontend ๐Ÿ“š > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€  (0) 2024.07.06
[JS] for...of ๋ช…๋ น๋ฌธ  (2) 2023.12.04
[JS] Constructor(์ƒ์„ฑ์ž)๋ž€?  (0) 2023.11.28