web-dev-qa-db-fra.com

Tronquer un float et un double en java

Je veux tronquer un float et une double valeur en Java.

Voici mes exigences: 1. si j'ai 12.49688f, il devrait être imprimé au format 12.49 sans arrondir 2. s'il correspond à 12.456 en double, il devrait être imprimé au format 12.45 sans arrondir 3. Dans tous les cas, si la valeur est égale à 12.0, elle doit être imprimée au format 12 uniquement.

la condition 3 doit toujours être prise en compte. Elle doit être concurrente de la logique de troncature.

11
Azfar

essayez ceci

DecimalFormat df = new DecimalFormat("##.##");
df.setRoundingMode(RoundingMode.DOWN);
System.out.println(df.format(12.49688f));
System.out.println(df.format(12.456));
System.out.println(df.format(12.0));

Ici, nous utilisons un formateur décimal pour le formatage. Le mode arrondi est réglé sur DOWN afin qu'il ne soit pas automatiquement arrondi à la décimale.

Le résultat attendu est:

12.49
12.45
12
21
Kshitij

J'ai le même problème avec Android, vous pouvez utiliser à la place: 

DecimalFormat df = new DecimalFormat("##.##");
df.setRoundingMode(RoundingMode.DOWN);

mais pour cette API, le niveau 9 est requis.

Une autre solution rapide est:

double number = 12.43543542;
int aux = (int)(number*100);//1243
double result = aux/100d;//12.43
4
titusfx
double d = <some-value>;
System.out.println(String.format("%.2f", d - 0.005);
4
Prizoff

Vérifiez Java.math.BigDecimal.round(MathContext). 

1
Torben

jetez un oeil avec DecimalFormat():

DecimalFormat df = new DecimalFormat("#.##");
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setDecimalSeparator(',');
df.setDecimalFormatSymbols(dfs);
1
revo

Essayez d’utiliser DecimalFormat et réglez le paramètre RoundingMode pour qu’il corresponde à vos besoins.

0
ChadNC