[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" 으로 바꾸었다.
'javascript' 카테고리의 다른 글
[JAVASCRIPT] 기본 함수 작성법, function 만들기 (0) | 2021.10.15 |
---|---|
[JAVASCRIPT] 문자형 데이터 선언, string data 선언 (0) | 2021.10.15 |
[JAVASCRIPT] JSON 객체를 string 객체로 변환, stringify() 사용법 (0) | 2021.08.10 |
[JAVASCRIPT] 문자열 길이 (string.length) (0) | 2021.03.03 |
[JAVASCRIPT] 문자열 자르기, 문자열 나누기 (split, substring, substr) (0) | 2021.03.03 |
댓글