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 :

Résultat anormal lors de calcul Double


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Par défaut Résultat anormal lors de calcul Double
    Coucou tout le monde,

    Juste une petite question :
    Est-ce normal que lorsqu'on fait :
    double test;
    test = 578 * 0.001; //Pour faire une division par 1000
    J'obtient le résultat 0.578 (ce qui est tout à fait normal
    Mais lorsque je fais 565 ou 563 :
    test = 565 * 0.001;
    J'obtient le résultat : 0.5650000000000001

    Je pense qu'il est possible d'arrondir après x chiffre apres la virgule.
    Comment on fait ?

    Voilà, si quelqu'un pouvait m'apporté plus d'information sur "double"

    Merci d'avance

  2. #2
    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
    C'est normal les calculs sur les types natifs apportent des imprécisions. Pour les calculs avec plus de pérécision, utiliser BigDecimal ou BigInteger.

    A+

  3. #3
    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 thibaut
    C'est normal les calculs sur les types natifs apportent des imprécisions. Pour les calculs avec plus de pérécision, utiliser BigDecimal ou BigInteger.

    A+
    Oui, enfin, pas toujours... D'avoir une erreur de 10^-16 n'est pas forcément génant... D'autant que dans ce cas, BigDecimal apporterait plus de précision, mais pas une précision infinie car ça ne tombe pas juste, quelque soit le nombre de chiffres après la virgule...

    Pour que ça ne gêne pas l'affichage, quand tu affiches un double, passe par DecimalFormat.

  4. #4
    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
    Le DecimalFormat seul n'est pas la bonne solution.

    Il faut arrondir et tronquer le résultat.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Par défaut
    Citation Envoyé par thibaut
    Le DecimalFormat seul n'est pas la bonne solution.

    Il faut arrondir et tronquer le résultat.
    Dans ce cas là, comment fait-on pour arrondir ?

    D'autre part, une division par 1000 et donne en général un résultat précis.. (ce n'est pas comme si je diviser par 3...)

    Cela permet juste de décallé le virgule

  6. #6
    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 totore
    D'autre part, une division par 1000 et donne en général un résultat précis.. (ce n'est pas comme si je diviser par 3...)

    Cela permet juste de décallé le virgule
    Ce que tu dis est vrai uniquement dans la base dans laquelle tu travailles...

    En base 10, tu divises par 10^3 (1000) ça ne fait que décaler la virgule...
    L'ordinateur travaille en base 2, et donc c'est quand tu divises par 2^3 que ça ne fait que décaler la virgule (bien sûr ça marche avec toutes les puissances, 2^4, 2^5, 2^-12...).

    Or, en base 2, 1/10 (0.1) ça ne tombe pas juste, d'où les erreurs

Discussions similaires

  1. Résultat dynamique d'un calcul
    Par nineosoe dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/06/2007, 15h42
  2. [C] Récupérer un résultat de fonction de type double
    Par EnigmuS dans le forum x86 32-bits / 64-bits
    Réponses: 10
    Dernier message: 23/04/2007, 10h17
  3. Réponses: 1
    Dernier message: 13/11/2006, 18h37
  4. résultat anormal d'une requete
    Par Dafbau dans le forum Access
    Réponses: 2
    Dernier message: 06/10/2006, 19h22
  5. Réponses: 1
    Dernier message: 07/02/2006, 12h52

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