>  기사  >  백엔드 개발  >  PHP에서 부동 소수점 숫자의 사용법은 무엇입니까

PHP에서 부동 소수점 숫자의 사용법은 무엇입니까

藏色散人
藏色散人원래의
2021-12-01 09:20:402088검색

PHP 부동 소수점 숫자는 "$a = 1.234; $b = 1.2e3; $c = 7E-10; $d = 1_234.567;"과 같은 구문으로 정의할 수 있는 부동 소수점 유형을 나타냅니다.

PHP에서 부동 소수점 숫자의 사용법은 무엇입니까

이 기사의 운영 환경: Windows 7 시스템, PHP 버전 7.4, DELL G3 컴퓨터

PHP 부동 소수점 숫자의 사용법은 무엇입니까?

php Float Float 유형

부동 소수점 유형(부동 소수점 유형이라고도 함) 점 숫자 부동, 배정밀도 숫자 배정밀도 또는 실수 실수)는 다음 구문 중 하나를 사용하여 정의할 수 있습니다:

<?php
$a = 1.234; 
$b = 1.2e3; 
$c = 7E-10;
$d = 1_234.567; // 从 PHP 7.4.0 开始支持
?>

부동 소수점 숫자는 다음 형식으로 표시됩니다(PHP 7.4 이전에는 밑줄이 지원되지 않습니다). 0):

LNUM          [0-9]+(_[0-9]+)*
DNUM          ([0-9]*(_[0-9]+)*[\.]{LNUM}) | ({LNUM}[\.][0-9]*(_[0-9]+)*)
EXPONENT_DNUM (({LNUM} | {DNUM}) [eE][+-]? {LNUM})

부동 소수점 숫자의 단어 길이는 플랫폼에 따라 다르지만 일반적으로 최대값은 십진수 14자리(64비트 IEEE 형식)의 정밀도로 1.8e308입니다.

경고

부동 소수점 숫자의 정밀도

부동 소수점 숫자는 정밀도가 제한되어 있습니다. 시스템에 따라 다르지만 PHP는 일반적으로 IEEE 754 이중 형식을 사용하므로 반올림으로 인한 최대 상대 오차는 1.11e-16입니다. 기본이 아닌 수학 연산은 더 큰 오류를 초래할 수 있으므로 복합 연산을 수행할 때 오류 전파를 고려해야 합니다.

또한 0.1이나 0.7과 같이 십진수로 정확하게 표현할 수 있는 유리수는 가수가 아무리 많아도 내부에서 사용하는 이진수로는 정확하게 표현할 수 없기 때문에 조금도 잃지 않고 이진수 형식으로 변환할 수 없습니다. 정밀도가 좀. 이는 혼란스러운 결과를 초래할 수 있습니다. 예를 들어, 바닥((0.1+0.7)*10)은 일반적으로 예상되는 8 대신 7을 반환합니다. 왜냐하면 결과의 내부 표현은 실제로 7.999999999999991118... 과 같기 때문입니다.

그러므로 부동 소수점 숫자 결과가 마지막 자리까지 정확하다고 절대 믿지 말고 두 부동 소수점 숫자가 같은지 비교하지 마세요. 정말로 더 높은 정밀도가 필요한 경우 임의 정밀도 수학 함수나 gmp 함수를 사용해야 합니다.

부동 소수점 숫자로 변환

문자열에서

If the string is numeric or leading numeric then it will resolve to the corresponding float value, otherwise it is converted to zero (0).

다른 유형에서

다른 유형의 값의 경우 상황은 값을 먼저 int로 변환한 다음 float로 변환하는 것과 유사합니다. 자세한 내용은 "정수로 변환" 섹션을 참조하세요.

注意:
As certain types have undefined behavior when converting to int, this is also the case when converting to float.

부동 소수점 비교

위의 경고 메시지에서 알 수 있듯이 내부 표현으로 인해 두 부동 소수점 숫자를 동등하게 비교하는 것은 문제가 있습니다. 그러나 부동 소수점 값을 비교하는 우회 방법이 있습니다.

부동 소수점 숫자가 같은지 테스트하려면 해당 값보다 아주 조금 큰 최소 오류 값을 사용하세요. 기계 엡실론 또는 최소 단위 정수라고도 하는 이 값은 계산에 허용될 수 있는 가장 작은 차이 값입니다.

$a 및 $b는 소수점 이하 5자리의 정밀도와 같습니다.

<?php
$a = 1.23456789;
$b = 1.23456780;
$epsilon = 0.00001;
if(abs($a-$b) < $epsilon) {
    echo "true";
}
?>

NaN

특정 수학 연산은 상수 NAN으로 표시되는 결과를 생성합니다. 이 결과는 부동 소수점 연산에서 정의되지 않았거나 표현할 수 없는 값을 나타냅니다. 이 값을 다른 값(true 제외)과 느슨하게 또는 엄격하게 비교하면 false가 됩니다.

NAN은 다른 값을 나타내기 때문에 NAN은 자신을 포함한 다른 값과 비교해서는 안 되며 is_nan()을 사용하여 확인해야 합니다.

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP에서 부동 소수점 숫자의 사용법은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.