왜 반올림은 0으로만 할까?
0말고 다른수로도 반올림 해보는건 어떨까?
라는 생각을 가끔씩 해봤는데.. 솔직히 별 필요성을 느끼지 못했었다.
그런데 주식 관련한 로보어드바이저를 만들면서 필요해졌다. 호가를 찍을때 5단위가 되기 때문이다.
아래와 같이 php의 반올림 함수인 round()를 이용하여 5의 배수로 반올림 해주는 코드를 짜봤다.
원리는 굳이 설명안해도 될만큼 간단하다. 여기서 볼것은 round() 함수의 두번째 인수인 반올림 자릿수도 고려한다는 사실이다. 이러한 편리한 기능은 살려놔야 코딩하는 재미가 있다ㅎㅎ
function roundCenter($price, $precision) {
//지정한 자릿수로 반올림 (1)
$round = round($price, $precision);
//지정한 자릿수 이하가 5가 되도록 변경 (2)
$square = -$precision;
$digit = pow(10, $square);
$center = (floor($price / $digit) * $digit) + (5 * pow(10, $square -1));
//(1)과 (2)를 원래 숫자와 비교하여 더 가까운 것을 택함
return abs($price - $round) < abs($price - $center) ? $round : $center;
}
결과값으로 검증해 보자...
echo roundCenter(573424.2517, 3).'<br />';
echo roundCenter(573424.2517, 2).'<br />';
echo roundCenter(573424.2517, 1).'<br />';
echo roundCenter(573424.2517, 0).'<br />';
echo roundCenter(573424.2517, -1).'<br />';
echo roundCenter(573424.2517, -2).'<br />';
echo roundCenter(573424.2517, -3).'<br />';
출력...
573424.2515
573424.25
573424.25
573424.5
573425
573400
573500
위에서 보듯이 지정 자릿수가 3이면 소수점 3째짜리까지 나오거나 소수점 4째자리가 5인 수가 나온다.
도움이 되셨다면~ 정성으로 빚은 저희 앱! 많은 이용 바래요:)
https://meorimal.com/index.html?tab=spaceship
https://meorimal.com/subway.html
'개발 > php, javascript' 카테고리의 다른 글
Int 난수 함수로 Float 난수 깔끔하게 발생시키기 (0) | 2019.12.26 |
---|---|
삼각 분포로 난수 발생시키기 (0) | 2019.10.28 |
삼각행렬로 연립방정식 단번에 구하기 (0) | 2019.08.19 |
php의 json_decode에서 null이 나올경우 살펴봐야 할점 (0) | 2013.11.11 |
javascript 로 애니메이션 움직임 만들기 (0) | 2013.09.02 |