logo

DowanKim

27. μˆ«μžν˜•

2026λ…„ 4μ›” 14일

μžλ°”μŠ€ν¬λ¦½νŠΈ

πŸ”’ 1. 숫자 μž…λ ₯의 기술: 과학적 ν‘œκΈ°λ²•

0을 일일이 νƒ€μ΄ν•‘ν•˜λŠ” 수고λ₯Ό λœμ–΄μ£ΌλŠ” 'e' ν‘œκΈ°λ²•μ€ 가독성을 λΉ„μ•½μ μœΌλ‘œ λ†’μ—¬μ€λ‹ˆλ‹€.

  • 큰 숫자 (e 뒀에 μ–‘μˆ˜): 10의 κ±°λ“­μ œκ³±μ„ κ³±ν•©λ‹ˆλ‹€.
    • 1e9 $\rightarrow$ 1κ³Ό 0이 9개 (10μ–΅)
  • μž‘μ€ 숫자 (e 뒀에 음수): 10의 κ±°λ“­μ œκ³±μœΌλ‘œ λ‚˜λˆ•λ‹ˆλ‹€.
    • 1e-6 $\rightarrow$ 0.000001 (λ°±λ§ŒλΆ„μ˜ 1)

🎨 2. 진법 λ³€ν™˜κ³Ό toString(base)

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 16μ§„μˆ˜(0x), 2μ§„μˆ˜(0b), 8μ§„μˆ˜(0o)λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€. 특히 toString λ©”μ„œλ“œλŠ” 진법 λ³€ν™˜μ— 맀우 κ°•λ ₯ν•©λ‹ˆλ‹€.

  • num.toString(36): 0-9와 a-zλ₯Ό λͺ¨λ‘ μ‚¬μš©ν•˜μ—¬ 숫자λ₯Ό ν‘œν˜„ν•©λ‹ˆλ‹€. κΈ΄ IDλ₯Ό 짧은 λ¬Έμžμ—΄λ‘œ μ••μΆ•ν•  λ•Œ(예: URL 단좕) μ•„μ£Ό μœ μš©ν•©λ‹ˆλ‹€.
  • 숫자 λ¦¬ν„°λŸ΄ 직호좜: 123..toString(36) 처럼 점을 두 개 찍어야 ν•©λ‹ˆλ‹€. 첫 번째 점은 μ†Œμˆ˜μ μœΌλ‘œ μΈμ‹λ˜κΈ° λ•Œλ¬Έμ΄μ£ .

βœ‚οΈ 3. μ–΄λ¦Όμˆ˜ κ΅¬ν•˜κΈ° (Rounding)

상황에 λ§žλŠ” 반올림/λ‚΄λ¦Ό ν•¨μˆ˜ 선택이 μ€‘μš”ν•©λ‹ˆλ‹€.

λ©”μ„œλ“œμ—­ν• μ˜ˆμ‹œ (3.6 / -1.1)
Math.floorλ‚΄λ¦Ό (μ†Œμˆ˜λΆ€ 버림)3 / -2
Math.ceil올림4 / -1
Math.round반올림4 / -1
Math.truncμ†Œμˆ˜λΆ€ λ¬΄μ‹œ (μ •μˆ˜λΆ€λ§Œ 남김)3 / -1
toFixed(n)$n$번째 μžλ¦¬κΉŒμ§€ 반올림 (λ¬Έμžμ—΄ λ°˜ν™˜)"3.60"

⚠️ 4. λΆ€μ •ν™•ν•œ 계산: λΆ€λ™μ†Œμˆ˜μ μ˜ 함정

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μˆ«μžλŠ” IEEE-754 ν˜•μ‹μ„ λ”°λ₯΄κΈ° λ•Œλ¬Έμ— λ°œμƒν•˜λŠ” 유λͺ…ν•œ ν˜„μƒμž…λ‹ˆλ‹€.

0.1 + 0.2 === 0.3은 falseμž…λ‹ˆλ‹€.

μ‹€μ œ κ²°κ³ΌλŠ” 0.30000000000000004κ°€ λ‚˜μ˜΅λ‹ˆλ‹€. 10μ§„μˆ˜ 0.1은 2μ§„μˆ˜λ‘œ λ³€ν™˜ν•  λ•Œ λ¬΄ν•œ μ†Œμˆ˜κ°€ 되기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

βœ… ν•΄κ²°μ±…

  1. toFixed μ‚¬μš©: κ²°κ³Όλ₯Ό μ μ ˆν•œ μ†Œμˆ˜μ  μžλ¦¬μ—μ„œ λŠμ–΄μ€λ‹ˆλ‹€. 단, λ°˜ν™˜κ°’μ΄ λ¬Έμžμ—΄μ΄λ―€λ‘œ λ‹€μ‹œ 숫자둜 λ°”κΏ€ 땐 μ•žμ— +λ₯Ό λΆ™μ—¬μ£Όμ„Έμš”.
  2. μ •μˆ˜ μ—°μ‚°: λͺ¨λ“  μˆ«μžμ— 100을 κ³±ν•΄ μ •μˆ˜λ‘œ κ³„μ‚°ν•œ λ’€ λ‹€μ‹œ 100으둜 λ‚˜λˆ•λ‹ˆλ‹€.

πŸ” 5. 특수 μˆ«μžμ™€ 검사 ν•¨μˆ˜

  • isNaN(value): 값이 NaN인지 ν™•μΈν•©λ‹ˆλ‹€. NaN === NaN은 false이기에 λ°˜λ“œμ‹œ 이 ν•¨μˆ˜λ₯Ό 써야 ν•©λ‹ˆλ‹€.
  • isFinite(value): 일반 μˆ«μžμΈμ§€ ν™•μΈν•©λ‹ˆλ‹€. λ¬Έμžμ—΄μ„ 숫자둜 λ°”κΏ” 검증할 λ•Œ μœ μš©ν•©λ‹ˆλ‹€.
  • Object.is(NaN, NaN): trueλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. μ—„κ²©ν•œ 비ꡐ가 ν•„μš”ν•  λ•Œ μ‚¬μš©λ˜λŠ” 에지 μΌ€μ΄μŠ€ λ©”μ„œλ“œμž…λ‹ˆλ‹€.

πŸ§ͺ 6. parseInt와 parseFloat

Number()λŠ” "100px" 같은 λ¬Έμžμ—΄μ„ 보면 ν¬κΈ°ν•˜κ³  NaN을 λ±‰μ§€λ§Œ, 이 μΉœκ΅¬λ“€μ€ κ°€λŠ₯ν•œ ν•œ λκΉŒμ§€ 숫자λ₯Ό μ½μ–΄λƒ…λ‹ˆλ‹€.

alert( parseInt('100px') ); // 100 alert( parseFloat('12.5em') ); // 12.5 alert( parseInt('a123') ); // NaN (μ²˜μŒλΆ€ν„° μˆ«μžκ°€ μ•„λ‹ˆλ©΄ μ‹€νŒ¨)

πŸŽ™οΈ 기술 λ©΄μ ‘ λŒ€λΉ„ (Interview Questions)

Q1. μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ•„μ£Ό 큰 μ •μˆ˜(Safe Integer λ²”μœ„ λ°–)λ₯Ό 닀뀄야 ν•  땐 μ–΄λ–»κ²Œ ν•˜λ‚˜μš”? (쀑급)

λ‹΅λ³€: μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 일반적인 μˆ«μžλŠ” $2^{53}-1$ 보닀 큰 μ •μˆ˜λ₯Ό μ •ν™•ν•˜κ²Œ ν‘œν˜„ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. 이럴 λ•ŒλŠ” 숫자 끝에 n을 λΆ™μ΄λŠ” BigInt μžλ£Œν˜•μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. BigIntλŠ” μž„μ˜ 정밀도λ₯Ό μ§€μ›ν•˜μ—¬ 아무리 큰 μˆ«μžλ„ μ•ˆμ „ν•˜κ²Œ μ—°μ‚°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Q2. 0.1 + 0.2κ°€ 0.3이 μ•„λ‹Œ 이유λ₯Ό '이진법' κ΄€μ μ—μ„œ μ„€λͺ…ν•΄ μ£Όμ„Έμš”. (심화)

λ‹΅λ³€: 10μ§„μˆ˜ μ†Œμˆ˜ 0.1은 2μ§„λ²•μœΌλ‘œ ν‘œν˜„ν•˜λ©΄ $0.0001100110011...$ 처럼 λ¬΄ν•œ μ†Œμˆ˜κ°€ λ©λ‹ˆλ‹€. 64λΉ„νŠΈ λ©”λͺ¨λ¦¬ 곡간은 μœ ν•œν•˜κΈ° λ•Œλ¬Έμ— 이λ₯Ό μ €μž₯ν•˜λŠ” κ³Όμ •μ—μ„œ λ―Έμ„Έν•œ 반올림 μ˜€μ°¨κ°€ λ°œμƒν•˜λ©°, μ—°μ‚° κ³Όμ •μ—μ„œ 이 μ˜€μ°¨λ“€μ΄ λˆ„μ λ˜μ–΄ λˆˆμ— λ³΄μ΄λŠ” κ²°κ³Όκ°’μ˜ 차이λ₯Ό λ§Œλ“€κ²Œ λ©λ‹ˆλ‹€.