PHP에서 소수점 이하 특정 자릿수 버림 함수 구현 방법
페이지 정보

본문
PHP의 기본 함수인 round나 number_format은 반올림을 수행하므로, 소수점 이하를 강제로 버려야 하는 경우 사용자 정의 함수가 필요합니다. 이 가이드를 통해 floor 함수를 활용한 버림 로직 구현 방법을 확인하세요.
PHP 소수점 이하 특정 자릿수 버림 구현 방법
PHP의 내장 함수인 round()와 number_format()은 기본적으로 반올림을 수행합니다. 따라서 소수점 이하 특정 자릿수에서 강제로 버림을 수행하려면 floor() 함수를 응용한 사용자 정의 함수를 구현해야 합니다.
버림 함수 구현 원리
floor() 함수는 소수점 이하를 버리고 가장 가까운 작은 정수를 반환합니다. 특정 자릿수까지 버림을 적용하려면 다음 공식을 사용합니다.
공식: floor($값 * pow(10, $자릿수)) / pow(10, $자릿수)
이 방식은 대상 숫자에 10의 n승을 곱해 버림할 자릿수까지를 정수부로 올린 뒤 floor()를 적용하고, 다시 10의 n승으로 나누어 원래 자릿수로 복원하는 원리입니다.
사용자 정의 함수 예시
음수와 양수를 모두 고려하여 소수점 이하를 버리는 함수 예시입니다.
function round_down($num, $d = 0) {
return sgn($num) * floor(abs($num) * pow(10, $d)) / pow(10, $d);
}
function sgn($x) {
return $x? ($x > 0? 1: -1): 0;
}
// 사용 예시
$a = 31.4657;
echo round_down($a, 2); // 결과: 31.46
주요 수학 함수 비교
floor($value): 소수점 이하를 버리고 가장 가까운 작은 정수를 반환합니다.ceil($value): 소수점 이하를 올림하여 가장 가까운 큰 정수를 반환합니다.round($value, $precision): 지정된 자릿수에서 반올림합니다.
위 함수들은 모두 소수점 이하를 처리하지만, round()는 반올림을 수행하므로 버림이 필요한 경우에는 반드시 floor()를 기반으로 한 연산이 필요합니다.
PHP 수학 함수(ceil, floor, round)의 차이
PHP에서 숫자의 소수점 처리를 위해 사용하는 대표적인 내장 함수들은 동작 방식에 따라 다음과 같이 구분됩니다.
1. ceil(): 올림
입력된 값보다 크거나 같은 가장 작은 정수를 반환합니다. 소수점 이하에 값이 존재하면 무조건 올림 처리합니다.
- 예:
ceil(4.3)→5,ceil(9.999)→10
2. floor(): 버림
입력된 값보다 작거나 같은 가장 큰 정수를 반환합니다. 소수점 이하의 값을 무조건 버립니다.
- 예:
floor(4.3)→4,floor(9.999)→9
3. round(): 반올림
소수점 이하의 값이 0.5보다 크면 올리고, 작으면 버리는 반올림을 수행합니다. 두 번째 인자를 사용하여 반올림할 자릿수를 지정할 수 있습니다.
- 예:
round(3.4)→3,round(3.6)→4,round(1.95583, 2)→1.96
요약 비교
| 함수 | 동작 | 결과 예시 (입력 3.6) | 결과 예시 (입력 3.4) |
|---|---|---|---|
| ceil() | 올림 | 4 | 4 |
| floor() | 버림 | 3 | 3 |
| round() | 반올림 | 4 | 3 |
주의사항: round()와 number_format() 함수는 기본적으로 반올림을 수행하므로, 특정 자릿수 이하를 강제로 버려야 하는 경우에는 floor() 함수를 활용한 사용자 정의 로직이 필요합니다.
PHP 소수점 이하 특정 자릿수 버림 구현
PHP의 내장 함수인 round()와 number_format()은 기본적으로 반올림을 수행하므로, 특정 자릿수 이하를 강제로 버리기 위해서는 floor() 함수를 활용한 사용자 정의 함수가 필요합니다.
버림 함수 구현 원리
floor() 함수는 소수점 이하를 버리고 정수만 남기는 함수입니다. 특정 소수점 자릿수까지 유지하고 그 이하를 버리려면 다음 단계를 거쳐야 합니다.
- 자리 이동: 버림을 원하는 자릿수만큼 10의 거듭제곱(
pow(10, $d))을 곱하여 소수점을 오른쪽으로 이동시킵니다. - 버림 수행:
floor()함수를 적용하여 소수점 이하를 제거합니다. - 자리 복원: 다시 10의 거듭제곱으로 나누어 원래의 소수점 위치로 되돌립니다.
사용자 정의 함수 예시
음수 값을 포함하여 정확하게 처리하려면 부호를 판별하는 sgn 함수와 함께 구성하는 것이 좋습니다.
function round_down($num, $d = 0) {
return sgn($num) * floor(abs($num) * pow(10, $d)) / pow(10, $d);
}
function sgn($x) {
return $x? ($x > 0? 1: -1): 0;
}
// 사용 예시
$a = 31.4657;
echo round_down($a, 2); // 결과: 31.46
주의사항: 음수 값 처리
floor() 함수는 음수 입력 시 더 작은(절대값이 큰) 정수로 내림 처리됩니다. 예를 들어 floor(-1.1)은 -2를 반환합니다. 따라서 데이터의 정밀도가 중요한 경우, 위와 같이 abs()를 사용하여 절대값 기준으로 버림을 수행한 뒤 부호를 다시 곱해주는 방식이 안전합니다.
상황별 버림 함수 적용 가이드
| 내 상황 | 우선할 판단 | 다음 행동 |
|---|---|---|
| 소수점 이하를 무조건 버리고 정수만 얻고 싶을 때 | 내장 함수 floor() 사용 | floor($값) 호출 |
| 소수점 특정 자릿수까지 유지하고 그 이하를 버리고 싶을 때 | 사용자 정의 함수 구현 | floor($값 * pow(10, $자릿수)) / pow(10, $자릿수) 연산 수행 |
| 음수 값을 포함하여 정확한 버림 처리가 필요할 때 | 부호 판별 로직 추가 | sgn() 함수를 병행하여 절대값 기준 버림 후 부호 복원 |
반올림이 아닌 버림이 필요한데 round()를 쓰고 있을 때 | 함수 교체 | round()를 floor() 기반 사용자 정의 함수로 변경 |
실전 FAQ
Q: round()나 number_format()으로 소수점 버림을 할 수 없나요?
A: 두 함수 모두 기본적으로 반올림을 수행하므로 버림 용도로는 부적합합니다. 강제 버림이 필요하다면 floor()를 활용한 연산이 필수입니다.
Q: 음수를 floor()로 버림할 때 결과가 왜 예상과 다른가요?
A: floor()는 입력값보다 작거나 같은 가장 큰 정수를 반환합니다(예: floor(-1.1)은 -2). 음수 데이터의 정밀도가 중요하다면 abs()로 절대값을 구한 뒤 버림을 수행하고 부호를 다시 곱하는 방식을 권장합니다.
Q: pow(10, $d)를 사용하는 이유는 무엇인가요?
A: floor()는 정수 단위로만 버림을 수행합니다. 소수점 n번째 자리까지 유지하려면 10의 n승을 곱해 해당 자리를 정수부로 올린 뒤 버림을 수행하고, 다시 10의 n승으로 나누어 원래 자릿수로 복원해야 하기 때문입니다.
참고자료
기타 참고자료
- crivius.tistory.com — 크리비어스 :: PHP 소수점 - ceil(올림), floor(버림), round(반올림)
- triki.net — PHP 소수점 올림, 내림, 반올림 구하기 feat ceil, floor, round – 모두의매뉴얼
- m.blog.naver.com — PHP 소숫점 관련 함수- round, ceil, floor : 네이버 블로그
- m.blog.naver.com — PHP 올림 / 내림 / 반올림 (ceil / floor / round) : 네이버 블로그
- xorms0707.tistory.com — PHP 소수점 올림, 반올림, 버림 / ceil(). round(), floor()
- 이전글그누보드 다중 첨부파일 개별 다운로드 포인트 차감 설정 방법 26.10.05
- 다음글그누보드 스마트에디터 이미지 업로드 용량 제한 및 리사이즈 설정 가이드 26.10.05
댓글목록
등록된 댓글이 없습니다.