[PHP] 숫자를 백 단위 미만 버림하고 천 단위 “k” 로 표시하는 방법
문제
예를 들어서 1268 이라는 숫자가 있는데, 이 숫자를 사용자에게 간단하게 1.2k 와 같은 형식으로 보여주기 위해서는 어떻게 해야 하는지 알아 봅시다.
해결 방법
이전 포스트에서 PHP에서 올림, 내림, 반올림을 다루는 함수들에 대해 이야기한 적이 있었습니다.
1268 을 1.2로 표현할 때 십의 자리에서 반올림을 사용하면 1300이 되기 때문에 반올림은 사용할 수 없었고, 그러면 우리는 십의 자리에서 내림(버림, floor
)을 사용해야 한다는 것을 알 수 있죠.
그런데 여기서 또다시 문제가 생기는데 PHP 의 floor
함수는 십의 자리 또는 소수점 몇 째 자리에서 버림을 할지 결정할 수가 없고, 오직 소수부만 버림 처리를 할 수 있다는 것입니다.
그래서 일단 아래와 같이 버릴 부분을 소수부로 만들어 줍시다.
return floor(1268/100); // Result: 12
다시 말해 버림을 하고 싶은 숫자를 소수점으로 만들어 놓고 floor 처리를 하는 것이죠.
이 상태에서 우리는 다시 천 단위를 뜻하는 “k” 를 이용할 수 있도록 다시 10으로 나눠줍니다.
return floor(1268/100) / 10; // Result: 1.2
이제 우리가 원하는 부분에 거의 도달 했죠? 마지막으로 뒤에 단위인 “k”를 문자열에 붙여 줍니다.
return floor(1268/100) / 10 . 'K'; // Result: 1.2K
사실 이 내용은 이 웹사이트에서 조회수가 천이 넘어가는 글의 조회수를 간단하게 보여주기 위해서 어떻게 해야 할까라는 고민에서 출발한 것입니다. 그래서 만약 1268 같은 숫자가 있을 때 이는 분명 1300에는 도달하지 못 한 것이므로 round
를 이용해 반올림 할 수가 없었던 것이죠.
어쨌든 머리를 조금만 굴려보니 간단하게 해결 할 수 있는 문제였습니다.
주의
- PHP.net 에서는
floor
에 대해, “입력된 숫자 다음으로 낮은 정수를 반환” 한다고 설명하고 있습니다. 만약 음수 -1.32 가floor
에 입력 되었다면,floor
는 -2를 반환할 것입니다. floor
는float
형식으로 숫자를 반환하도록 되어 있어, 소수점 매우 낮은 자리까지 핸들링 해야 하는 상황에서는 사용에 주의가 필요합니다.
끝.
참고자료
- floor, PHP.net