Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Outils
Outils Forum d'entraide sur les outils gravitant autour de MS-SQL Server, tels que bcp, TDS, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2011, 18h07   #1
Membre confirmé
 
Homme Vincent
Développeur informatique
Inscription : janvier 2009
Messages : 248
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 248
Points : 236
Points : 236
Par défaut [MS SQL][ODBC][FREETDS] Problème d'exactitude des données

Bonjour,

Voici mon problème : lorsque je récupère en PHP une des données de ma base celle-ci à une valeur légèrement différente que celle stockée en base :

Ex : - en base : 96629,54
- à la sortie de requête faite en PHP : 96629.53999999999

Ma config:
MS SQL SERVER
LAMP - PHP 5.2
ODBC + FREETDS (je soupçonne un bug à ce niveau)
type de la donnée en base : float

Ma question : Connaissez-vous une solution pour palier ce problème ?

Question subsidiaire : Auriez-vous un autre type de connexion à la base MS SQL à me conseiller ? Est-ce qu'un driver PDO peut être une bonne solution ? (j'ai vu qu'il était encore expérimental pour l'accès MSSQL)

Merci de votre aide.
philodido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 19h42   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Les types de données FLOAT et REAL sont des implémentations de nombres réels en base binaires tel que la norme FIPS/IEEE (754-1985) l'a prévue, donc avec des erreurs dues aux écarts d'arrondis de la conversion base 2 base 10.

Si vous voulez des nombres exacts en base 10 (par exemple pour la comptabilité) il vous faut utiliser les type DECIMAL ou NUMERIC en précisant le nombre de chiffres significatifs et la précision.
Par exemple DECIMAL(16,2).

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 20h02   #3
Membre confirmé
 
Homme Vincent
Développeur informatique
Inscription : janvier 2009
Messages : 248
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 248
Points : 236
Points : 236
Merci beaucoup , j'ai justement hésité à passer le type en decimal.
J'essaie cela dès demain, et je posterai un retour.
philodido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 13h16   #4
Membre confirmé
 
Homme Vincent
Développeur informatique
Inscription : janvier 2009
Messages : 248
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 248
Points : 236
Points : 236
Ok, ça fonctionne impec. Néanmoins j'ai dut faire une autre petite modif car à l'enregistrement, les champs de mon formulaire qui étaient vides faisaient planter la requête d'update (converting char to numeric - et je n'avais pas ce problème en type float), maintenant je passe tous les champs monétaires de mon formulaire à 0 lorsqu'ils sont vides avant l'update et tout fonctionne nickel.
Encore merci
philodido est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h46.


 
 
 
 
Partenaires

Hébergement Web