Les nombres décimal

Les nombres décimaaux (connus aussi sous le vocable de "double", "float" ou "nombre rééls") peuvent être spécifiés en utilisant la syntaxe suivante :

Exemple 11-11. Exemple de nombres décimaux

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

Formellement :

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

La taille des nombres décimaux dépend de la plate-forme. Un maximum de ~1.8e308 avec une précision de 14 décimales est une configuration répandue : c'est le format 64 bits IEEE.

Précision des nombres décimaux

Il est fréquent que de simples fractions décimales telles que 0.1 ou 0.7 ne puissent être converties au format interne binaire sans une légère perte de précision. Cela peut conduire à des résultats étonnants : par exemple, floor((0.1+0.7)*10) retournera 7 au lieu de 8 car le résultat de la représentation interne est 7.9999999999....

Tout ceci est lié au fait qu'il est impossible d'exprimer certaines fractions en un nombre fini de chiffres. Par exemple 1/3 s'écrira 0.3333333... en mode décimal.

Ne faites donc jamais confiance aux nombres à virgule jusqu'à leur dernière décimale et ne comparez jamais ces nombres avec l'opérateur d'égalité. Si vous avez besoin d'une précision particulière, reportez-vous au traitement des nombres de grande taille avec les bibliothèques BC ou GMP.

Conversion d'un nombre décimal

Pour savoir quand et comment des chaînes sont converties en nombres à virgules flottantes, voyez la section "Conversion de chaînes de caractères". Pour les valeurs d'autres types, la conversion est la même que si la valeur était d'abord convertie en entier, puis en nombre décimal. Voyez la section "Conversion d'un entier". Depuis PHP 5, une alerte est affichée si vous convertissez un objet en nombre décimal.