[ Javascript ] toFixed 함수는 왜 string 을 반환할까 ?

Idel·2023년 2월 6일

[ Javascript ] toFixed 함수는 왜 string 을 반환할까 ?

자바스크립트에서 소수점 반올림을 위해 사용된는 toFixed 함수는 string을 반환한다는 것을 알고 계셨나요?

이번 포스팅에서는 왜 toFixed 함수는 string 을 반환하는지에 대해서 알아보고 number 형으로 반환하기 위한 여러가지 대안들에 대해서 알아보도록 하겠습니다.

  • toFixed가 함수가 string을 반환하는 이유

(스택오버플로우를 참고하여 작성하였습니다.)

자바스크립트에서 0.1과 제곱들은 이진 부동소수점 시스템(binary floating-point system)에서 정확하게 표현되지 않기 때문입니다.

아래의 예시와 같은 숫자들이 각각 0.01, 0.1로 표시가 된다는 것입니다.

// 출력값 > value : 0.01
console.log('value : ', 0.01000000000000000020816681711721685132943093776702880859375)

// 출력값 > value : 0.1
console.log('value : ', 0.1000000000000000055511151231257827021181583404541015625)
따라서 string 타입만이 위와 같은 숫자를 정확하게 표현할 수 있는 유일한 수단이기 때문에 toFixed 함수가 string형을 반환하게 됩니다.

  • string이 아닌 number로 반환하는 여러가지 방법

1) Math.round 함수 사용

let someNumber = 42.008;
someNumber = Math.round( someNumber * 1e2 ) / 1e2; // 소수점 두 자리까지 표현

2) Number.prototype에서 직접 정의해주기

Number.prototype.toFixedNumber = function(x, base){
let pow = Math.pow(base||10,x);
return Math.round(this*pow) / pow;
}

let someNumber = 42.008;
someNumber = someNumber.toFixedNumber(2);

3) parseFloat 또는 Number를 통한 형변환

// parseFloat 사용
let someNumber = 123.456;
someNumber = parseFloat(someNumber.toFixed(2));

// Number 사용
let someNumber = 2.2873424;
someNumber = Number(someNumber.toFixed(2));

0개의 댓글