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

avec Java Discussion :

Un résulat inexact


Sujet :

avec Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Un résulat inexact
    Bonjour,

    J'ai une erreur étrange en lançant ce programme dans lequel je saisis un montant HT : 100 , du taux de TVA : 20 et cherche le prix TTC.
    Il devrait m'afficher 120 MAIS me donne 120,00001
    Savez vous d'où peut venir cette inexactitude ?

    Merci beaucoup d'avance pour l'aide que vous pourrez m'apporter.

    voilà ce que j'ai fait en code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import javax.swing.*; 
    public class drty {
     
    public static void main(String[] args) {
     
    Float x,y;
    x=Float.parseFloat(JOptionPane.showInputDialog(null,"Entrez le montant hors taxe:" ));
    y=Float.parseFloat(JOptionPane.showInputDialog(null,"Entrez le taux de TVA:" ));
    JOptionPane.showMessageDialog(null,"Le montant TTC est : "+x*(1+y/100));
    }
    }

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825

  3. #3
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Petit remarque préalable : utilise la balise code pour afficher du code.

    Pour ton problème, c'est normal, cela est du à la représentation des float en mémoire (mantisse et exposant)

    la précision des float est, me semble-t-il, de 6 chiffres significatifs, et de 15 chiffres significatifs pour les double.
    Si tu souhaites ne plus avoir de type de problème, la classe BigDecimal peut t'aider.

  4. #4
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour,


    j'ai galéré avec les problèmes d'imprécisions sur les montants.
    Personnellement, j'utilise maintenant des 'entiers' contenant le montant en centimes. Il n'y a plus d'imprécision dans les calculs.
    @ bientôt...

    Salut & @+ sur 3W!

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par rtg57 Voir le message
    j'ai galéré avec les problèmes d'imprécisions sur les montants.
    Personnellement, j'utilise maintenant des 'entiers' contenant le montant en centimes. Il n'y a plus d'imprécision dans les calculs.
    Ouaip.
    Entiers, avec long ou BigInteger. Ou à la rigueur calculs exacts avec BigDecimal. Ça évite de devoir se demander si les imprécisions des flottants ne vont pas devenir significatives, quand on fait des calculs monétaires.
    Les flottants c'est pas mal, par exemple pour des calculs de coordonnées ou de température, où on se tape que les calculs soient exacts, il faut juste qu'ils soient suffisamment précis.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    +1 pour BigDecimal
    voir : http://jmdoudoux.developpez.com/cours/developpons/java/

    BigDecimal est la classe "approuvée" pour manipuler des montants monétaires
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  7. #7
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    ça complique quand même pas mal l’exécution de calculs très simples, mais j étudie ça au plus vite.
    merci pour vos réponses rapides.

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par thierrys85 Voir le message
    ça complique quand même pas mal l’exécution de calculs très simples,
    Oui. Mais cela force à la rigueur. Les ordinateurs ne sont pas prévus, à l'origine pour faire des calculs de la manière dont un humain les pense. a + b pour un ordinateur ne veut pas dire a + b pour un humain. Et la plupart du temps c'est très bien comme ça, car on veut que l'ordinateur fasse comme un ordinateur, pas comme un humain.
    Passer par des classes dédiées pour gérer l'addition permet de remettre les pendules à l'heure, au prix d'une écriture plus lourde.

    Cela dit, il y a pas mal de langages où on utilise juste long et on ajoute la virgule à l'affichage. Au prix d'un risque accru de se tromper.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    A noter que j'ai déjà vu au moins un article, lié au monde bancaire, où il était déterminé au final qu'utiliser des doubles, malgré l'erreur potentielle, coutait moins cher que les surcoût de dev pour faire ça de manière rigoureuse et repasser dans tous le code pour s'assurer du manque d'erreur. Il faut de toutes façon que tu arrondisse chaque opération car si tu vend un bic à 1.05€ HTVA, tu ne facture pas (à ma connaissance) 1.05€ *1.21(tva) = 1.2705€ mais 1.28€. A ce tarif, combien de bic faut-il vendre en une fois pour faire une erreur de 1 cent?

    Avec des doubles, et en affichant tout à 2 décimales arrondies, faut déjà pas mal d'écritures comptables pour se gourer de 1 cents. Ou il faut acheter quelque millions d'action pour se retrouver à payer un euro de plus. Et franchement, celui qui achète un millions d'actions, cherche à faire des bénéfice largement supérieur à 1 euro . Ce serait un peu comme payer 1 semaine de formation à 10 personnes du service de nettoyage pour doser correctement les produits afin d'économiser 300€/an. Le but est atteint mais est-il rentable?

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    C'est ce que je me suis toujours dit que les choses devraient être en pratique.

    Mais on m'a toujours vendu qu'en comptabilité, on n'a pas le droit de "perdre" le moindre centime entré ou sorti, pour quelque raison que ce soit, erreur informatique ou autre. On doit toujours savoir où sont les centimes qui sont rentrés. Parfois, pour certaines étapes intermédiaires, on doit compter en dix-millièmes à la place.
    Peu importe que ce ne soit pas beaucoup d'argent (en fait, carrément négligeable,) et que si quelqu'un se plaint on pourra toujours lui donner son centime en profits et pertes sans se demander où on l'a perdu. C'est interdit, et dans les contrôles comptables les amendes seront, elles, non négligeables si répétées.

    C'est ce qu'on m'a dit, et n'ayant pas de formation comptable, j'ai cru les types dont c'est le boulot, en m'acquittant du mien qui est de leur fournir l'outil informatique faisant ce dont ils ont besoin.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    c'est ce que j'ai cru aussi. Puis j'ai vu fonctionner des comptabilités

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

Discussions similaires

  1. [Oracle 9i]Exporter Résulat SQL en XML
    Par kobe dans le forum Oracle
    Réponses: 16
    Dernier message: 29/04/2007, 18h05
  2. between date dans requête donne des faux résulats
    Par pschmidtke dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 08/06/2006, 16h43
  3. exemple du FAQ inexacte
    Par kevredon dans le forum Général Java
    Réponses: 10
    Dernier message: 18/05/2006, 13h52
  4. Enregistre résulat multiplication dans une table
    Par faranfasi dans le forum Access
    Réponses: 2
    Dernier message: 11/10/2005, 13h04
  5. Perplexité face au résulat de mon algo ...qu'en pensez vous?
    Par Clad3 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 14/06/2005, 15h15

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