Forum und email

부동소수점

부동소수점(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})
float의 크기는 십진수 14자리가 일반적인 값(64비트 IEEE 포맷)이 되는 정밀도를 갖는 ~1.8e308까지의 최대값을 갖을지라도 플랫폼에 따라 달라진다.

Warning

부동소수점 정밀도

0.1이나 0.7와 같은 단순한 십진수의 분수는 약간의 정밀도의 소실없이 내부적인 이진처리로 변환될 수 없다. 이 사실은 혼란스런 결과를 유도할수 있다: 예를 들면, floor((0.1+0.7)*10)은 기대값 8이 아닌 7을 돌려준다. 내부적인 표현이 7.9999999999...와 같을것이기 때문이다.

이와 같은 이유로 유한값의 십진표기법을 쓰는 몇몇 소수를 정확히 표현할수 없다는 것이다. 예를 들면, 십진표기법의 1/30.3333333. . .이 된다.

결코 부동소수점이 마지막 수를 갖을수 있을것이라고 생각하거나 부동소수점이 동일한지 비교하도록 해서는 안된다. 더 높은 정밀도가 필요하면, 대신 arbitrary precision math functionsgmp함수를 사용하도록 해야 한다.

float으로 변환하기

문자열이 언제, 어떻게 float으로 변환하는지에 대한 정보는 문자열을 숫자로 변환하기섹션을 참고하라. 다른 타입에 대한 변환은 그 값이 integer나 float으로 변환하는 방식과 동일하다. 더 자세한 정보는 integer로 변환하기를 참고.