본문 바로가기
javascript

[JAVASCRIPT] 소수점처리 toFixed(), Error : substr is not a function

디지털노마드 2021. 3. 25.
반응형

[JAVASCRIPT] 소수점처리 toFixed(), Error : substr is not a function

소수점으로 이루어진 inputData 를 받아서 소수점 2자리까지 자른 후 100을 곱해서 0 ~100 의 수로 만들고 그 수를 16진수 1byte (0 ~ 255, 0x00 ~ 0xFF) 의 범위로 변환해서 return 하려고 한다.

 

inputData > 소수점 2자리변환 > 100곱하고 소수점 지우기 > 16진수로 바꾸어 return

let inputData = 0.05555555

일단 inputData 의 소수점 자리가 너무 길기 때문에 일단 앞의 4자리 ("0.05") 로 자르려고 한다. 사실 실제 code 에서는 inputData 를 string 으로 받아서 아래와 같이 자르려고 했다.

value = inputData.substr(0, 4);

당연히 될거라고 생각했던 라인에서 에러가 두둥하고 발생한다. 

"substr is not a function"

아니 substr 이 함수가 아니라니? 여러군데 찾아보니 string 으로 받았다고 할지라도 0.0555... 이런식으로 되어 있기 때문에 숫자로 간주가 되서 substr 로 나눌수가 없다고 한다. string 타입으로 받았는데 왜 number 로 자동 간주하는지는 모르겠지만, 그래서 찾다보니 아래와 같은 방법으로 소수점 2자리 까지 가져올 수 있었다.

value = inputData.toFixed(2);

소수점 2자리 까지 끊어 오는 함수 toFixed(n) 이다. 이런식으로 하면 0.05555... 였던 수를 0.06 (반올림 되는듯) 으로 가져올 수 있다. 여기서 value 는 string 으로 return 된다. 

value2 = parseInt((parseFloat(value) * 100).toFixed(0)).toString(16);

value 의 값은 여전히 "0.06" 이지만 string 이기 때문에 일단 float 로 변환해준다. 그리고 100을 곱해주면 숫자 6이 될것이다. 정확히는 6.00이 된다. 이 상태에서 소수점을 없애기 위해 방금 알아낸 toFixed(0) 을 적용하면 숫자 6이 깔끔하게 떨어진다. 여기서 parseInt 로 integer 로 바꾸어주고 (여기서 Integer 로 바꾸지 않으면 toString(16) 에서 에러가 발생한다.) 16진수의 string 값으로 바꾸어 주는 toString(16) 을 사용하면 6이 0x06 으로 바뀐다. 역시 string 이다. 

 

최종적으로 숫자 0.05555... 를 문자 "06" 으로 바꾸었다. 

 

 

반응형

댓글