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 :

Tronquer Un Float à Trois chifres aprés la virgule


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 59
    Par défaut Tronquer Un Float à Trois chifres aprés la virgule
    je veux tronquer Un Float à Trois chifres aprés la virgule sans l'arrondir
    par exemple j'ai un floot
    1023.45699 ==> j'obtiens 1023.456
    23.2369==> j'obtiens 23.236
    Comment faire ?
    Merci D'avance

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    en convertissant en string et en tronquant au 3ème caractère arpès le point :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    float f=1023.45699;
    String s=Float.valueOf(f).toString();
    String sf=s.substring(0,s.indexOf(".")+3);
    float ftronc=Float.parseFloat(sf);
    Rajouter à cela, les contrôls qui gèrent le cas où il y a moins de 3 décimales après le point et où il n'y a pas de point.
    PS, il y a certainement une méthode plus efficace avec les regex.

  3. #3
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 59
    Par défaut J'ai essayé ca
    float f=1023.45699;
    Lorque je fais Float.valueOf(f) ==> je dois passer un String non pas un float

    mais si je fais String.valueOf(f)==> ca marche mais il m'arrondi le float ce que moi je ne veux pas

    déja ca ne marche pas

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Tu multiplies par 1000, tu castes en int, tu divises par 1000.
    Et tu convertis en chaine.

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    ou, après avoir multiplier par 1000, tu utilises Math.floor qui supprime la partie décimale

  6. #6
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 59
    Par défaut
    mon float n'est pas fixe pour que je multiplie par 1000

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    1023.45699
    (*1000)
    1023456.99
    (tronquer)
    1023456
    (/1000)
    1023.456

    pile ce que tu demandais...

    Citation Envoyé par wassimb Voir le message
    mon float n'est pas fixe pour que je multiplie par 1000
    je comprends pas ce que tu dis...

  8. #8
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    En jettant un coup d'oeil à la FAQ on trouve aisément que pour formatter les nombres décimaux il faut utiliser la classe DecimalFormat (cf Comment convertir un nombre en chaîne formatée ?).

    Celle-ci possède notamment une méthode setRoundingMode() permettant de spécifier le type d'arrondi voulu (RoundingMode.DOWN dans ton cas) .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  9. #9
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 59
    Par défaut un bout de code sera le bienvenue
    Pouvez vous me donner un bout de code explicatif SVP

  10. #10
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Le code pour l'utilisation de la classe DecimalFormat est indiqué dans le lien que j'ai donné précédemment (il ne manque que l'appel à la méthode setRoundingMode) .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  11. #11
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 59
    Par défaut
    Désolé mais j'ai pas bien compris ka Doc
    En plus j'ai bcp Testé Est ce que je demande est si difficile à Faire:
    Tronquer des float à Trois Chifres aprés la virgule sans faire d'arrondis.
    NB: mais float sont variables

  12. #12
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Ca me parait pourtant assez clair.

    Tu doit d'abord instancier un DecimalFormat en lui indiquant le format voulu (dans ton cas, trois chiffres après la virgule)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DecimalFormat df = new DecimalFormat("#.000");
    Puis lui spécifier que tu veux arrondir en gardant la valeur la plus basse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df.setRoundingMode(RoundingMode.DOWN);
    Ensuite il te suffit d'utiliser la méthode format() pour appliquer le format à ton nombre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(df.format(mon_nombre));
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  13. #13
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 59
    Par défaut setRoundingMode(RoundingMode.DOWN) à partir de 1.6
    On peut utiliser setRoundingMode(RoundingMode.DOWN) à partir de 1.6
    je suis perdu est ce que pour faire une chose aussi simple que ca je dois faire le tour du monde

  14. #14
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    La méthode setRoundingMode() n'est effectivement disponible que depuis Java 6.
    Si tu travaille avec une version inférieur il te reste la solution d'oter 0.5 à ton nombre avant de le formater.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  15. #15
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 59
    Par défaut Le code que vous m'avez donné ne marche malhereusement pas.
    j'ai insatller JSE6 c'est bon mais le bout de code que vous m'avez donné ne marche malhereusement pas.
    voilà le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          float mon_nombre =9919639.4539f;
          DecimalFormat df = new DecimalFormat("#.000");
         df.setRoundingMode(RoundingMode.DOWN);
         System.out.println(df.format(mon_nombre));
    il me donne comme resultat ==> 9919639,000
    De l'aide SVP

  16. #16
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Le problème vient de l'utilisation du type float, il faut utiliser le type double.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double mon_nombre =9919639.4539d;
    DecimalFormat df = new DecimalFormat("#.000");
    df.setRoundingMode(RoundingMode.DOWN);
    System.out.println(df.format(mon_nombre));
    Par contre c'est bizarre, le problème apparaît toujours en castant le float en double.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  17. #17
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Je pense que c'est un bug, il n'y a aucune raison que ça ne marche pas avec un float .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  18. #18
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 59
    Par défaut
    Que dois je faire alors ??
    Ma fonction prend en paramétre des Float....
    Je tourne en Rond...
    JAVA ne peux pas faire une chose aussi bete que ca

  19. #19
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    utiliser DecimalDormat est le plus élégant

    mais la version moche marche :
    float x = 4.2369f;
    float y = (float) (Math.floor(x*1000))/1000;
    System.out.println(" y = "+y);

    et ça renvoie :
    y = 4.236

    bouh, c'est trés laid... mais ça te renvoie le float que tu cherchais

  20. #20
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Citation Envoyé par le y@m's Voir le message
    Je pense que c'est un bug, il n'y a aucune raison que ça ne marche pas avec un float .
    Je pense que le probleme vient de la mantisse de l'exemple donné, qui ne tient pas sur les 23 bits de la mantisse du type float.

Discussions similaires

  1. [VS2008] Trois chiffres après la virgule
    Par miupri4 dans le forum SDK
    Réponses: 2
    Dernier message: 15/03/2011, 12h38
  2. Réponses: 2
    Dernier message: 26/09/2010, 16h42
  3. [float] 2 chiffres après la virgule
    Par log2n dans le forum Langage
    Réponses: 23
    Dernier message: 14/09/2010, 09h22
  4. Tronquer un float (n chiffres apres la virgule)
    Par franck06 dans le forum Langage
    Réponses: 8
    Dernier message: 16/06/2009, 17h58
  5. Conversion string to Float (deux numero après la virgule)
    Par abbd dans le forum Windows Forms
    Réponses: 1
    Dernier message: 16/02/2009, 01h02

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