[ Javascript ] 자바스크립트 상에서 Byte를 보기 쉽게 자동 변환하기
2020. 7. 7. 18:51ㆍ언어/JS
728x90
반응형
SMALL
우선 소스 원문입니다.
최다 추천을 받은 글을 보시면 다음과 같은 소스가 있습니다.
function formatBytes(bytes, decimals = 2) {
if (bytes === 0) return '0 Bytes';
const k = 1024;
const dm = decimals < 0 ? 0 : decimals;
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
}
log로 변환하는 이유는 여러 가지가 있을 수 있지만 여기서 쓰이는 이유는
지수를 얻기 위함입니다.
바이트를 1024로 한 번 나누면 KB가 되고,
두 번 나누면 MB가 되는 것을 알 수 있습니다.
이해하기 쉽게 예를 들어 보겠습니다.
참고로 Math.log10() 함수를 쓰면 밑이 10인 로그를 취하여 값을 반환합니다.
1024->1000이라 치고
10KB가 입력되었다고 가정하면
Math.log10(10000)/Math.log10(1000) = 4/3 = 1.333333...이고 소수점 버리면 1입니다.
10MB가 입력되었다고 가정하면
Math.log10(10000000)/Math.log10(1000) = 7/3 = 2.333333...이고 소수점 버리면 2입니다.
대강 알 수 있듯이
i에는 입력된 Byte의 규모(?)가 KB 면 1, MB 면 2, GB 면 3이 저장됩니다.
Math.log() 함수는 자연로그를 취한 값을 반환하며 이 함수를 써도 결과는 똑같습니다.
결과적으로 1024를 i 만큼 제곱한 값을 나눠주고 소수점 자른 다음 단위 값이 출력되는 것을 확인할 수 있습니다.
728x90
반응형
'언어 > JS' 카테고리의 다른 글
[ JavaScript ] 페이지 이동 시 내용 변경 감지, readonly 값 변경 감지 (0) | 2021.03.24 |
---|---|
[ JavaScript ] IE에서 Swiper 사용 시 주의 사항 (0) | 2021.02.15 |
[ Javascript ] 웹페이지 상에서 백스페이스 키 눌림 방지 (0) | 2020.06.17 |
[ Javascript ] Javascript에서 서버시간 가져오기 (0) | 2020.06.15 |
[ Javascript ] Form.serialize를 json형식으로 변환하기 (0) | 2020.05.28 |