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
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
en convertissant en string et en tronquant au 3ème caractère arpès le point :
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.
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);
PS, il y a certainement une méthode plus efficace avec les regex.
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![]()
Tu multiplies par 1000, tu castes en int, tu divises par 1000.
Et tu convertis en chaine.
ou, après avoir multiplier par 1000, tu utilises Math.floor qui supprime la partie décimale
mon float n'est pas fixe pour que je multiplie par 1000
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
Pouvez vous me donner un bout de code explicatif SVP
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
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
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)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 DecimalFormat df = new DecimalFormat("#.000");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 df.setRoundingMode(RoundingMode.DOWN);
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
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![]()
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
j'ai insatller JSE6 c'est bon mais le bout de code que vous m'avez donné ne marche malhereusement pas.
voilà le code :
il me donne comme resultat ==> 9919639,000
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));
De l'aide SVP![]()
Le problème vient de l'utilisation du type float, il faut utiliser le type double.
Par contre c'est bizarre, le problème apparaît toujours en castant le float en 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));
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
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
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![]()
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
Partager