IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Probleme d'imprecision avec FLOAT


Sujet :

MS SQL Server

  1. #1
    Membre régulier Avatar de elvivo
    Inscrit en
    Mai 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 105
    Points : 104
    Points
    104
    Par défaut Probleme d'imprecision avec FLOAT
    Salut,

    Dans une GUI je recupere un champ float d'une table qui contient: -58.89
    Pour l'extraire je fais un bete SELECT:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT
       Id
       , Value
    FROM
       MaTable
    WHERE
       Id = @Id
    Ca me retourne: -58.890000000000001

    Les probleme c'est que dans la GUI, l'utilisateur peut ajuster cette valeur et dans certains cas l'annuler en saisissant l'inverse. La valeur finale etant donc la valeur initiale plus la somme des ajustements. Donc mon gentil user va voir ca, va copier/coller et changer le signe puis valider.
    Ceci va me donner une erreur infime sur le total (genre 1e-16) mais une erreur quand meme qui va faire que je ne pourrais pas tester "valeur = 0.0".

    Comment puis je faire pour empecher SQL server de me retourner toutes ces decimales sans arrondir la valeur et quelle que soit la precision du nombre concerne ?

    Merci d'avance !!

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    float et real sont des valeurs approchées. Il n'y a aucune garantie en SQL Server de consistance dans les opérations sur ces types. Utilise des decimal à la place.

  3. #3
    Membre régulier Avatar de elvivo
    Inscrit en
    Mai 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 105
    Points : 104
    Points
    104
    Par défaut
    Mais je perds en precision si je cast en decimal non ?

  4. #4
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Il n'y a aucune précision quoi que tu fasses avec un float, la valeur est approchée. Citation des BOL :
    Types de données approximatives à utiliser avec des données numériques à virgule flottante. Les données à virgule flottante sont approximatives ; il n'est donc pas possible de représenter précisément toutes les valeurs de ce type de données.
    http://msdn2.microsoft.com/fr-fr/library/ms173773.aspx

    Donc, tu castes comme tu peux dans des nouvelles colonnes de type decimal, et tu arrêtes de travailler avec des float, ce type de données n'est pas fait pour stocker des valeurs fixes.

  5. #5
    Membre éclairé
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Points : 749
    Points
    749
    Par défaut
    En ce qui me concerne, j'ai totalement abandonné le float au profit du decimal.

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    + 1

  7. #7
    Membre régulier Avatar de elvivo
    Inscrit en
    Mai 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 105
    Points : 104
    Points
    104
    Par défaut
    Merci

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    mieux vaut tard que jamais ?


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de bloc avec float : left
    Par anxious dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 10/06/2009, 10h16
  2. Probleme avec float.parse
    Par Djug dans le forum C#
    Réponses: 4
    Dernier message: 11/07/2008, 20h09
  3. probleme avec float et GetDlgItemText
    Par nanettemontp dans le forum Windows
    Réponses: 2
    Dernier message: 02/10/2007, 08h42
  4. probleme de div avec float: left sous FF
    Par Toutouffe dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 14/06/2007, 16h08
  5. Problème avec float sous Mysql
    Par adgabd dans le forum Bases de données
    Réponses: 1
    Dernier message: 22/09/2006, 10h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo