>백엔드 개발 >PHP 튜토리얼 >PHP 데이터 유형 부동 소수점 유형 구문 분석(Float)

PHP 데이터 유형 부동 소수점 유형 구문 분석(Float)

怪我咯
怪我咯원래의
2017-04-05 10:42:032546검색

Float(floatfloat이라고도 함, double 또는 실수)은 다음 구문 중 하나로 정의할 수 있습니다.

<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>

부동 소수점 숫자 표현:

LNUM [0-9]+
DNUM ([0-9]*[.]{LNUM}) ({LNUM}[ .][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 함수를 사용해야 합니다.

간단한 설명은 » 부동 소수점 가이드 웹페이지를 참조하세요.

부동 소수점 숫자로 변환

문자열을 부동 소수점 숫자로 변환하는 시기와 방법에 대한 정보를 원하시면 문자열을 숫자로 변환 페스티벌을 참조하세요. . 다른 유형의 값의 경우 상황은 값을 정수로 변환한 다음 부동 소수점으로 변환하는 것과 유사합니다. 자세한 내용은 "정수로 변환" 섹션을 참조하세요. PHP 5부터 객체를 부동 소수점 숫자로 변환하려고 하면 E_NOTICE 오류 메시지가 표시됩니다.

부동소수점 비교

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

부동 소수점 숫자가 같은지 테스트하려면 이 값보다 1포인트만 큰 최소 오류 값을 사용하세요. 이 값은 기계 최소값(엡실론)이라고도 하며 가장 작은 단위는 정수 이며, 이는 계산에서 허용되는 가장 작은 차이 값입니다.

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

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

NaN

특정 수학 연산은

상수 NAN으로 표시되는 결과를 생성합니다. 이 결과는 부동 소수점 연산에서 정의되지 않았거나 표현할 수 없는 값을 나타냅니다. 이 값을 다른 값과 느슨하게 또는 엄격하게 비교한 결과는 FALSE입니다.

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

위 내용은 PHP 데이터 유형 부동 소수점 유형 구문 분석(Float)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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