PHP number_format() 및 음수 값이 0으로 반올림되는 문제

PHP number_format() 및 음수 값이 0으로 반올림되는 문제

2022-10-19 last update

3 minutes reading php
알려진 바와 같이 PHP 함수 number_format()은 주어진 값을 필요한 소수점 이하 자릿수로 반올림합니다.

예:$a = 2.658;$x = number_format($a, 2);//--> 2.66$x = number_format($a, 0);//--> 3
내 관점에서 볼 때 0으로 반올림해야 하는 음수를 사용할 때 좋지 않은 부작용이 있습니다.
예:$a = -0.00000003;$x = number_format($a, 2);//--> -0.00$x = number_format($a, 0);//--> -0
출력 앞에 빼기 기호가 보입니까? 이것은 PHP 내부의 내부 부동 소수점 연산의 부정확성으로 인해 발생할 때 특히 성가신 일입니다.
예:$a = 7.8;$b = 7.79;$c = 0.01;$result = $a - $b - $c;$x = number_format($result, 2);//--> -0.00
이 경우 빼기 기호(-0.00)는 부동 소수점 부정확성으로 인해 결과가 -0.00000000000000021337이라는 사실의 결과입니다. 그러나 결과는 php.ini의 설정과 php 버전에 따라 다릅니다. 내 테스트에서는 소수점 이하 13자리의 부동 소수점 정확도로 PHP 5.3을 사용했습니다.
함수에 값을 전달하기 직전에 값을 필요한 소수 자릿수로 반올림하여 number_format()의 이러한 동작을 쉽게 피할 수 있습니다.
예:$a = -0.00000003;$x = number_format(round($a, 2), 2);//--> 0.00$x = number_format(round($a, 0), 0);//--> 0