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

Langage Java Discussion :

float et précision


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Inscrit en
    Juin 2003
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 158
    Par défaut float et précision
    Bonjour,

    J'ai trois float avec des valeurs distinctes que j'additionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    float toto1 = (float)650.0,
          toto2 = (float)127.4,
          toto3 = (float)4.2;
    float val1 = toto1+toto2+toto3,
          val2 = toto2+toto3;
    val1 vaut 781.60004 et val2 vaut 131.6

    Pourquoi je récupère 0.0004 ? Et pourquoi uniquement avec val1 ?

    Merci pour votre aide

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Ton erreur apparait que pour val 1 car tu additionnes des nombres d'ordre de grandeurs différents, et donc tu "perds" autant de précision (au maximum) que la différence des 2 ordres de grandeurs...

    EDIT: au lieu de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float f = (float)250.4;
    tu peux faire:

  3. #3
    Membre confirmé

    Inscrit en
    Juin 2003
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 158
    Par défaut
    OK, mais dans mon cas, les valeurs sont calculées donc comment faire pour avoir
    val1 qui vaut 781.60, ce qui est la vraie valeur ?

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par willowII
    OK, mais dans mon cas, les valeurs sont calculées donc comment faire pour avoir
    val1 qui vaut 781.60, ce qui est la vraie valeur ?
    Et bien, si ton nombre est décimal en base 2, tu peux utiliser la classe BigDecimal, sinon, ça n'est pas représentable tel quel en machine...

    Dans le cas des nombres fractionnaires non décimaux (1/3 par exemple), tu peux stocker le numérateur et le dénominateur...

  5. #5
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Salut,

    Avec float tu vas forcémment avoir des imprécisions au bout d'un certain nombre de calculs.
    Il faut utiliser la classe BigDecimal pour avoir une grande précision dans les calculs...

    A+

  6. #6
    Membre confirmé

    Inscrit en
    Juin 2003
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 158
    Par défaut
    Merci beaucoup pour vos explications. Dans la mesure où ces valeurs sont après stockées en base dans des colonnes de type FLOAT ... je me rends compte qu'il faut que je revois toute cette partie pour migrer vers des BigDecimal au niveau du code et a DECIMAL au niveau de la base.
    J'ai du boulot

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

Discussions similaires

  1. Régler précision d'un float
    Par Ange44 dans le forum C++
    Réponses: 5
    Dernier message: 20/01/2007, 15h33
  2. Précision sur les float
    Par Mike Reason dans le forum Langage
    Réponses: 3
    Dernier message: 07/12/2006, 14h53
  3. [Javascript] Précision des float
    Par NicoNours dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/03/2006, 09h12
  4. Précision du type float
    Par cj227854 dans le forum C
    Réponses: 5
    Dernier message: 02/11/2005, 20h54
  5. [MS-SQL][ADO] précision du type FLOAT
    Par Le Lézard dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/09/2004, 15h30

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