Number.isSafeInteger()

Number.isSafeInteger() λ©”μ„œλ“œλŠ” μ „λ‹¬λœ 값이 μ•ˆμ „ν•œ μ •μˆ«κ°’μΈμ§€ ν™•μΈν•œλ‹€.

function warn(x) {
  if(Number.isSafeInteger(x)) return 'Precision safe.';

  return 'Precision may be lost!';
}

// pow n제곱
warn(Math.pow(2, 53)); // "Precision may be lost!"
warn(Math.pow(2, 53) - 1); // "Precision safe."

μ•ˆμ „ν•œ μ •μˆ«κ°’

  • IEEE-754 λ°°μˆ˜λ„μˆ˜ ν˜•νƒœλ‘œ μ •ν™•νžˆ ν‘œν˜„λ  수 μžˆλŠ” 수

  • IEEE-754 ν‘œν˜„μ— 맞게 λ°˜μ˜¬λ¦Όν•˜λŠ” λ‹€λ₯Έ μ •μˆ˜μ˜ κ²°κ³Όκ°€ μ•„λ‹Œ IEEE-754 ν‘œν˜„

2^53 - 1은 μ•ˆμ „ν•œ μ •μˆ«κ°’μ΄λ‹€. 이 μ •μˆ˜λŠ” μ •ν™•ν•˜κ²Œ ν‘œν˜„ν•  수 있으며 IEEE-754 반올림 λͺ¨λ“œμ—μ„œ λ‹€λ₯Έ μ •μˆ«κ°’μ΄ 이 값을 λ°˜μ˜¬λ¦Όν•˜μ§€ μ•ŠλŠ”λ‹€. 반면 2^53은 μ•ˆμ „ν•˜μ§€ μ•Šμ€ μ •μˆ˜μ΄λ‹€. 이 μ •μˆ˜λŠ” μ •ν™•νžˆ IEEE-754둜 ν‘œν˜„λ  수 μžˆμ§€λ§Œ, μ •ν™•ν•˜κ²Œ ν‘œν˜„λ˜μ§€λ§Œ, IEEE-754μ—μ„œλŠ” ν‘œν˜„ν•  수 μ—†μœΌλ©° κ°€κΉŒμš΄ 수둜 λ°˜μ˜¬λ¦Όν•˜λŠ” 것과 0으둜 λ°˜μ˜¬λ¦Όν•˜λŠ” κ²ƒμœΌλ‘œ 2^53 λ°˜μ˜¬λ¦Όν•œλ‹€.

IEEE-754 IEEEμ—μ„œ κ°œλ°œν•œ μ»΄ν“¨ν„°μ—μ„œ λΆ€λ™μ†Œμˆ˜μ μ„ ν‘œν˜„ν•˜λŠ” κ°€μž₯ 널리 μ“°μ΄λŠ” ν‘œμ€€μ΄λ‹€. Β±0 λ“±μ˜ μˆ˜μ™€ λ¬΄ν•œ, NaN λ“±μ˜ 기호λ₯Ό ν‘œμ‹œν•˜λŠ” 법과 μ΄λŸ¬ν•œ μˆ˜μ— λŒ€ν•œ 연산을 μ •μ˜ν•˜κ³  μžˆλ‹€. κ°€μž₯ μ΅œμ‹  버전인 IEEE 754-2019κ°€ 2019λ…„ 6월에 λ°°ν‘œλ˜μ—ˆλ‹€.

μ΅œλŒ€ μ •λ°€λ„λ‘œ μ΅œλŒ€ 9μ‘° λ‹¬λŸ¬λ³΄λ‹€ ν¬κ±°λ‚˜ μž‘μ€ 값을 μ²˜λ¦¬ν•˜λ €λ©΄ Arbitrary-precision arithmetic 라이브러리λ₯Ό μ‚¬μš©ν•΄μ•Όν•œλ‹€.

ν”„λ‘œκ·Έλž˜λ¨Έ λͺ¨λ‘κ°€ μ•Œμ•„μ•Ό ν•˜λŠ” 뢀동 μ†Œμˆ˜μ  을 μ°Έκ³ ν•˜μŸˆ

큰 μ •μˆ˜λŠ” BigInt λ₯Ό μ‚¬μš©ν•˜μž

Syntax

Number.isSafeInteger(testValue)

Parameters

testValue μ•ˆμ „ν•œ μ •μˆ«κ°’μΈμ§€ νŒλ³„ν•œλ‹€.

Return value

μ£Όμ–΄μ§„ 값이 μ•ˆμ „ν•œ μ •μˆ«κ°’μΈμ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” Boolean 값이닀.

Examples

Number.isSafeInteger(3); // true
Number.isSafeInteger(Math.pow(2, 53)); // false
Number.isSafeInteger(Math.pow(2, 53) - 1); // true
Number.isSafeInteger(NaN); // false
Number.isSafeInteger(Infinity) // false
Number.isSafeInteger('3'); // false
Number.isSafeInteger(3.1); // false
Number.isSafeInteger(3.0); // true

Polyfill

Number.isSafeInteger = Number.isSageInteger || function (value) {
    return Number.isInteger(value) && Math.abs(value) <= Number.MAX_SAFE_INTEGER;
}

Browser compatibility

IE μ§€μ›μ•ˆλ¨

Last updated

Was this helpful?