PHP kézikönyv
Előző | 11. Fejezet. Típusok | Következő

# Lebegőpontos számok

A lebegőpontos számok ("float", "valós szám") az alábbi szintaxisok bármelyikével hozhatóak létre:

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

Formálisan:

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

A lebegőpontos számok mérete platformfüggő, de a maximális érték körülbelül 1.8e308, durván 14 tizedesjegy pontossággal (64 bites IEEE formátum).

Lebegőpontos számok pontossága

Elég gyakran előfordul, hogy egyszerű decimális törtek, mint a 0.1 és a 0.7 nem konvertálhatóak pontosan bináris megfelelőikre kis veszteség nélkül. Ez zavaró eredményekhez vezethet, például floor((0.1+0.7)*10) tipikusan 7 értékkel tér vissza, az elvárt 8 helyett, a belső ábrázolás miatt, ami valójában 7.9999999999....

Ez azzal a ténnyel van kapcsolatban, hogy lehetetlen megjeleníteni néhány törtet véges számú decimálisan számjeggyel. Például 1/3 decimálisan 0.3333333. . . értékké válik.

Ezért soha ne bízz meg a törtszámok eredményeiben az utolsó jegyig, és soha se hasoníts össze két lebegőpontos számot pontos egyenlőségre. Ha nagyobb pontosságú számokra van szükséges, használd a tetszőleges pontosságú matematikai függvényeket vagy a gmp függvényeket.

## Konverzió float-ra

A stringek float-ra történő konvertálásáról a Stringek átalakítása számmá című részben találsz információt. Más típusú értékek esetén a konverzió pontosan úgy történik, mintha előbb integer-ré konvertálódna, majd az eredmény float-ra. További információért lásd még a Egész értékké alakítás című részt. A PHP 5-ös verziójától ha objektumot float-tá alakítasz, figyelmeztetés (notice) szintű hibajelzés keletkezik.

Előző | Tartalom | Következő
Egész számok | Fel | Stringek