31,029
edits
No edit summary |
|||
| Line 89: | Line 89: | ||
</source> | </source> | ||
* Dans les requêtes SQL, on quote les champs mais pas les numériques qui contiennent des montants destinés à être stockés dans des champs de type double ou real. Les quotes sur les numériques de type float provoquent parfois un stockage d'une valeur différente. Par exemple 412.62 dans le insert sera en fait stocké avec la valeur 412.61999512 en base si le champ est de type double(24,8). Et seul le PHP voit 412.61999512. Les autres outils verront 412.62 donnant l'impression qu'il n'y a pas de problème. Et c'est le PHP qui a raison, il y a problème en base. En supprimant les quotes sur les numériques, cela va mieux. | * Dans les requêtes SQL, on quote les champs mais pas les numériques qui contiennent des montants destinés à être stockés dans des champs de type double ou real. Les quotes sur les numériques de type float provoquent parfois un stockage d'une valeur différente. Par exemple 412.62 dans le insert sera en fait stocké avec la valeur 412.61999512 en base (suite à des conversions chaines-numériques implicites) si le champ est de type double(24,8). Et seul le PHP voit 412.61999512. Les autres outils verront 412.62 donnant l'impression qu'il n'y a pas de problème. Et c'est le PHP qui a raison, il y a problème en base. En supprimant les quotes sur les numériques, cela va mieux. | ||
Exemple: | Exemple: | ||
| Line 97: | Line 97: | ||
</source> | </source> | ||
Remarque, le | Remarque, le problème des float est général et pas seulement sur les accès base, il est présent dans tous les languages quand on travaille sur des nombres réels, aussi ils doivent être, dès que affectés, nettoyés par la fonction price2num avec le 2eme paramètre renseigné à: | ||
'MU' (si il s'agit d'un prix unitaire), 'MT' (s'il s'agit d'un prix total) ou 'MS' (autres cas) selon le besoin. | 'MU' (si il s'agit d'un prix unitaire), 'MT' (s'il s'agit d'un prix total) ou 'MS' (autres cas) selon le besoin. | ||
Voir aussi le chapitre "Les nombres réels, montants et calculs" plus bas. | Voir aussi le chapitre "Les nombres réels, montants et calculs" plus bas. | ||