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
Version imprimable
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:
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) ;).
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) :roll:.
Désolé mais j'ai pas bien compris ka Doc :cry:
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:DecimalFormat df = new DecimalFormat("#.000");
Ensuite il te suffit d'utiliser la méthode format() pour appliquer le format à ton nombre :Code:df.setRoundingMode(RoundingMode.DOWN);
Code:System.out.println(df.format(mon_nombre));
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 :oops:
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.
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,000Code:
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 :cry::(
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:
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 pense que c'est un bug, il n'y a aucune raison que ça ne marche pas avec un float :?.
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