PHP 매뉴얼
이전 | 6. 장. 변수형 | 다음

# 부동소수점

부동소수점(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까지의 최대값을 갖을지라도 플랫폼에 따라 달라진다.

부동소수점 정밀도

`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로 변환하기를 참고.

이전 | 처음으로 | 다음
정수 | 위로 | 문자열