부동소수점
부동소수점(AKA "floats", "doubles", "real numbers")은 다음과 같은 문법으로 표현될수 있다.
<?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})
Warning
부동소수점 정밀도
0.1이나 0.7와 같은 단순한 십진수의 분수는 약간의 정밀도의 소실없이 내부적인 이진처리로 변환될 수 없다. 이 사실은 혼란스런 결과를 유도할수 있다: 예를 들면, floor((0.1+0.7)*10)은 기대값 8이 아닌 7을 돌려준다. 내부적인 표현이 7.9999999999...와 같을것이기 때문이다.
이와 같은 이유로 유한값의 십진표기법을 쓰는 몇몇 소수를 정확히 표현할수 없다는 것이다. 예를 들면, 십진표기법의 1/3은 0.3333333. . .이 된다.
결코 부동소수점이 마지막 수를 갖을수 있을것이라고 생각하거나 부동소수점이 동일한지 비교하도록 해서는 안된다. 더 높은 정밀도가 필요하면, 대신 arbitrary precision math functions나 gmp함수를 사용하도록 해야 한다.
float으로 변환하기
문자열이 언제, 어떻게 float으로 변환하는지에 대한 정보는 문자열을 숫자로 변환하기섹션을 참고하라. 다른 타입에 대한 변환은 그 값이 integer나 float으로 변환하는 방식과 동일하다. 더 자세한 정보는 integer로 변환하기를 참고.