e
를 활용하여 수를 표시합니다. 보통 0이 많이 들어가는 큰 숫자나 아주 작은 숫자 표시할 때 사용합니다.
let billion = 1e9; // 10억, 1과 9개의 0
alert( 7.3e9 ); // 73억 (7,300,000,000)
let ms = 1e-6; // 1에서 왼쪽으로 6번 소수점 이동
num.toExponential() 지수표기법으로 바꾼 문자열을 반환합니다.
(1203).toExponential() // "1.203e+3"
자바스크립트에서 기본적으로 지원하는 진법은 3개입니다.
이 외의 진법은 parseInt
(최대 36진법)를 사용합니다.
alert( 0xff ); // 16진수
alert( 0b11111111 ); // 2진수
alert( 0o377 ); // 8진수
위의 코드를 실행해보면, 모두 255라는 값이 나옵니다. 우리가 몇진법으로 표현하든, 리턴되는 값은 10진법의 숫자인 셈이죠.
그런데 우리가 코딩할 때, 해당 진법의 값을 그대로 문자열 값으로 받고 싶다면? toString(base)
를 사용할 수 있습니다.
toString은 base진법(최대 36진법)으로 숫자를 표현한 뒤, 이를 문자형으로 반환합니다.
메소드 설명 Number.parseInt(num, base) num을 base진법으로 변환하여 숫자값 반환 num.toString(base) num을 base진법으로 변환하여 문자값 반환
let num = 255;
alert( num.toString(16) ); // ff
alert( num.toString(2) ); // 11111111
255..toString(16) // ff
(244).toString(16) // ff
Math.floor(3.1); // 3
Math.floor(-1.1); // -2
Math.ceil(3.1); // 4
Math.ceil(-1.1); // -1
Math.round(3.1); // 3
Math.round(-1.1); // -1
Math.trunc(3.1); // 3
Math.trunc(-1.1); // -1
그런데 이들은 소수점 첫째자리까지만 반응합니다. n번째 자리까지 표현하고 싶다면 toFixed(n)
을 사용합니다.
num.toFixed(digits) digits+1 자리에서 반올림 한 값을 문자열 로 반환합니다. == num.toPrecision(digits)
let num = 12.34;
alert( +num.toFixed(1) ); // 12.3
아래 헬퍼함수를 활용하여 버림용, 올림용도 만들어 사용하면 됩니다.
let num = 1.234567;
const floorByNthDigits = (value, digits) => {
if (typeof digits !== "number" || digits < 0) {
return new Error("소수점 자릿수는 양의 정수가 와야 합니다.");
}
const _digits = Number("1e" + digits);
return Math.floor(value * _digits) / _digits;
};
console.log(floorByNthDigits(num, 2));
64비트가 넘어가는 큰 숫자이거나, 소수와 소수연산 등은 계산이 정확하지 않습니다.
2진법 체계인 컴퓨터가 십진법의 나눗셈을 하려니 무한소수가 발생하기 때문입니다.
정밀도 손실 보안 방안.
(1) num.toFixed(digits)을 사용하여 원하는 계산식까지만 자릿수를 잘라줍니다. == num.toPrecision(digits)
(2) 정수로 만들어 계산하고 다시 나눠줍니다. (제일 정확)
let sum = 0.1 + 0.2;
alert( +sum.toFixed(2) ); // (1)
((0.1 * 10) + (0.2 * 10)) / 10 // (2)
Number((0.1 + 0.2).toPrecision(12)) // (3)
Number.isNaN
인수를 숫자로 변환한 다음 숫자가 아닌지 테스트. 숫자가 아니어야 true.
alert( Number.isNaN(NaN) ); // true
alert( Number.isNaN("str") ); // true
Number.isFinite
인수를 숫자로 변환하고 NaN/Infinity/-Infinity가 아닌 일반 숫자면 true.
문자열이 일반 숫자인지 검증하는데 주로 사용합니다.
주의
isFinite(num)은 자동 숫자형변환 후 검사하고
Number.isFinite(num)은 자동형변환을 하지 않고 검사합니다.
alert( Number.isFinite("15") ); // false
alert( Number.isFinite("str") ); // false, NaN이기 때문입니다.
alert( isFinite(" ") ); // true
Number.isInteger
정수인지 확인
alert( Number.isInteger("15") ); // false
alert( Number.isInteger(15) ); // true
Number.isSafeInteger
안전한 정수(64비트를 넘지 않는 숫자)인지 확인
Numer.isSafeInteger(15) // true
Object.is
'==='보다 더 신뢰할 만한 결과를 아래 두 가지 경우에서 보여줍니다.
1. Object.is(NaN, NaN) // true
2. Object.is(0, -0) // fasle
문자열에서 숫자를 읽다가 숫자가 아닌 문자를 만나 오류가 발생하면 이미 수집된 숫자를 반환해 줍니다.
parseInt의 두번째 매개변수인 radis는 진수를 지정합니다. 기본 10진수이며 10진법 사용 시 생략 가능합니다.
메소드 설명 Number.parseInt(num, base) 숫자값만 추출하여 정수로 반환 Number.parseFloat(num) 숫자값만 추출하여 소수로 반환
alert( parseInt('100px') ); // 100
alert( parseFloat('12.5em') ); // 12.5
alert( parseInt('a123') ); // NaN, a는 숫자가 아니므로 숫자를 읽는 게 중지됩니다.
Math.random()
0과 1사이의 난수를 반환합니다.
alert( Math.random() ); // 0.1234567894322
alert( Math.random() * 5 ); // 0.5435252343232
Math.max(a, b, c...)
Math.min(a, b, c...)
alert( Math.max(3, 5, -10, 0, 1) ); // 5
alert( Math.min(1, 2) ); // 1
Math.pow(n, power)
n을 power번 거듭제곱한 값을 반환합니다.
alert( Math.pow(2, 10) ); // 2의 10제곱 = 1024
console.log(Math.abs(-10)); // 10
console.log(Math.abs(10)); // 10
console.log(Math.sqrt(25)); // 5
console.log(Math.sqrt(49)); // 7
Number("6");
+"6";