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 :

Division des valeurs doubles


Sujet :

avec Java

  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut Division des valeurs doubles
    Salut à tous,
    j'ai besoin de votre aide dans le petit problème suivant:
    Je suis entrain de chercher la similarité entre deux documents, j'ai appliqué une formule de similarité qui sous forme de" division des valeurs doubles" par fois le résultat dépasse 1 par exemple 1.00258938 mais normalement la similarité ne dépasse pas 1 donc est ce que ce problème est à cause de l'utilisation de type double ?!! Que pensez-vous ?!

  2. #2
    Membre chevronné
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Par défaut
    Bonjour,
    Effectivement, tu perds de la précision en opérant sur les doubles, ce qui explique que ton 1 soit supérieur à 1.
    Tu peux utiliser la classe BigDecimal avec laquelle tu gagneras en précision

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    salut,
    merci monsieur de me répondre.
    Est ce que j'utilise "BigDecimal" avant la division sur les valeurs doubles ou après sur la résultat de division?

  4. #4
    Membre chevronné
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Par défaut
    Il faut utiliser BigDecimal avant, sinon la précision est perdue, et utiliser les méthodes appropriées de la classe BigDecimal

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur java, .Net
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur java, .Net

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut
    Tu dois transformer ton double en String puis utiliser un bigDecimal pour avoir la meilleure précision

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String nombreString=String.valueOf(double);
    BigDecimal nombreBD=new BigDecimal(nombreString);

  6. #6
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par gandalf72000 Voir le message
    Tu dois transformer ton double en String puis utiliser un bigDecimal pour avoir la meilleure précision
    En effet j'allais conseiller de directement passer par le constructeur de BigDecimal avec un double en paramètre mais il est mentionné que la précision est de nouveau perdu.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  7. #7
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    Salut à tous,
    et merci pour vos réponses.
    malheureusement, le problème est reste même avec BigDecimal.

  8. #8
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par loudji Voir le message
    malheureusement, le problème est reste même avec BigDecimal.
    Si le problème est resté le même, ça signifie qu'il faut plutôt voir le soucis du côté de ta formule de similarité.

    PS : Montre tout de même le code de ton calcul pour voir si tu as utilisé BigDecimal correctement.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  9. #9
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 098
    Par défaut
    Sinon avant l'ère du BigDecimal, on arrondissais un moment (a l'affichage par exemple)
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    Salut à tous,
    voici le code que j'ai utilisé:
    h1 et h2 sont des doubles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    BigDecimal B=new BigDecimal(h1);
    BigDecimal D=new BigDecimal(h2);
    BigDecimal Résulat=B.divide(D, 3, BigDecimal.ROUND_DOWN);
    System.out.println("Résulat"+" "+Résulat);

  11. #11
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par loudji Voir le message
    Salut à tous,
    voici le code que j'ai utilisé:
    h1 et h2 sont des doubles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BigDecimal B=new BigDecimal(h1);
    BigDecimal D=new BigDecimal(h2);
    BigDecimal Résulat=B.divide(D, 3, BigDecimal.ROUND_DOWN);
    System.out.println("Résulat"+" "+Résulat);
    Toi t'as pas écouté gandalf72000 et la remarque que j'ai faite juste après...
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  12. #12
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    @Robin56 désolé peut être j'ai mal compris

  13. #13
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Je vois difficilement comment être plus claire que ça :
    Citation Envoyé par gandalf72000 Voir le message
    Tu dois transformer ton double en String puis utiliser un bigDecimal pour avoir la meilleure précision

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String nombreString=String.valueOf(double);
    BigDecimal nombreBD=new BigDecimal(nombreString);
    Ça c'est pas optimal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BigDecimal nombreBD = new BigDecimal(double);
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  14. #14
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    @Robin56 , c'est j'ai essayé ça mais la même chose.

  15. #15
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    En même temps, si le calcul est fait et fini, ça sert à rien de passer par les BigDecimal juste pour faire la division finale.
    Il fallait enlever tous les double du programme, et initialiser les nombres en BigDecimal, et utiliser seulement des BigDecimal, du début à la fin, sans jamais passer par un double.

    ... Mais bon, ça m'étonnerait que le problème soit là. C'est sûrement la formule qui peut parfaitement dépasser 1.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Sortie des valeurs de type double
    Par otspot dans le forum C++
    Réponses: 2
    Dernier message: 29/06/2008, 20h26
  2. Réponses: 14
    Dernier message: 30/05/2008, 17h04
  3. Réponses: 5
    Dernier message: 05/09/2007, 16h23
  4. [Tableaux] Foreach renvoie des valeurs double en php4
    Par Dantahoua dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2007, 17h49
  5. evc4:division des doubles
    Par gbardy dans le forum Visual C++
    Réponses: 10
    Dernier message: 07/08/2006, 14h12

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