PHP 개발 중에는 종종 부동 소수점 번호를 반올림해야하며 Ceil () 함수는 가장 일반적으로 사용되는 방법입니다. 그 기능은 천장 (2.3) 의 결과가 3 이고 천장 (-2.3) 의 결과는 -2 입니다. 그러나 우리가 1.2E3 (예 : 1200 ) 또는 5.678E-4 (즉, 0.0005678 )와 같은 과학적 표기법으로 표현 된 부동 소수점 번호를 다룰 때 Ceil () 기능은 여전히 안정적이고 안정적으로 작동합니까?
PHP에서 과학 표기법은 부동 소수점 표현 방법입니다. 1.2e3는 1.2 * 10^3 , 즉 1200을 의미합니다. 이것은 특히 금융, 과학 또는 일부 타사 API가 반환 한 데이터를 다룰 때 많은 수 또는 소수성을 나타내는 매우 일반적인 방법입니다.
<?php
echo 1.2e3; // 산출 1200
echo "\n";
echo 5.678e-4; // 산출 0.0005678
?>
Ceil () 기능은 숫자를 "반올림"하는 것입니다. 숫자가 양수인지 부정적이든 "더 큰 정수"의 방향으로 반올림됩니다.
<?php
echo ceil(2.3); // 산출 3
echo ceil(-2.3); // 산출 -2
?>
그것이 허용하는 매개 변수는 플로트 유형이고 플로트는 본질적으로 IEEE 754 이중 프레시션 플로팅 포인트 번호이므로 Ceil () 내부의 조작은 플로팅 포인트 번호의 정확도 제한에 따라 다릅니다.
Ceil ()을 직접 사용하여 과학 표기법 형태로 숫자 값을 처리 할 수 있습니다.
<?php
echo ceil(1.2e3); // 산출 1200
echo "\n";
echo ceil(5.678e-4); // 산출 1,결과가 있기 때문입니다 0.0005678,ceil 그러면 그게됩니다 1
?>
과학적 표기법 하에서 Ceil () 의 거동은 정상임을 알 수 있습니다. 하단에서 1.2E3은 실제로 PHP 통역사에 의해 1200.0 의 플로트 유형으로 처리되었습니다.
그러나 문제의 핵심은 Ceil () 의 구현이 아니라 부동 소수점 정확도의 한계 입니다. 예를 들어, 매우 작거나 매우 큰 과학적 표기법 값을 처리 할 때 Ceil ()은 부동 소수점 오류로 인해 예상치 못한 결과를 초래할 수 있습니다.
<?php
$val = 1.0000000000000001e0; // 이것은 매우 가깝습니다 1 부동 소수점 번호
echo ceil($val); // 산출 1
$val2 = 0.9999999999999999e0; // 이것은 약간 작습니다 1 부동 소수점 번호
echo ceil($val2); // 산출 1,이론적으로는 그렇습니다 1,그러나 실제 값은 확실하지 않습니다
?>
위의 예는 Ceil () 자체가 논리에 아무런 문제가 없더라도 부동 소수점 숫자의 실제 저장이 출력에 영향을 줄 수 있음을 보여줍니다. M66.net 에 부동 소수점 번호의 표현을 자세히 분석하는 기사가 있습니다.
Ceil ()을 사용하여 과학 표기법을 처리 할 때 오류를 피하기 위해 다음 전략을 채택 할 수 있습니다.
플로팅 포인트 번호 : Sprintf () 또는 Number_Format ()를 사용하여 정확도가 합리적인 범위 내에 있는지 확인하십시오.
판단 정확도 경계 : 임계 값 (예 : 정수 경계에 가까운 부동 소수점 번호)을 처리 할 때 결함 내성 판단을 추가하십시오.
BCMATH 또는 GMP 확장을 사용하십시오 : 고정밀 컴퓨팅 시나리오의 경우 이러한 확장 라이브러리는 내장 플로트 작업 대신 권장됩니다.
외부 데이터 표준화 : 예를 들어, API가 반환 한 과학 표기법 데이터는 추가 처리 전에 문자열로 변환됩니다.
전반적으로 Ceil () 함수는 PHP에서 신뢰할 수 있으며 과학 표기법으로 표시되는 숫자를 다룰 때는 일반적으로 실수를하지 않습니다. 그러나 문제는 종종 부동 소수점 번호 자체의 정확도에 있습니다. 따라서 정밀성과 관련된 시나리오를 다룰 때 개발자는 이에 더주의를 기울이고 데이터 범위를 합리적으로 제어하며 고정밀 라이브러리를 사용하여 필요한 경우 결과의 정확성을 보장해야합니다.