web-dev-qa-db-fra.com

J'ai besoin d'arrondir un flottant à deux décimales dans Java

Duplicata possible:
Comment arrondir un nombre à n décimales en Java

J'ai du mal à arrondir un flotteur à deux décimales. J'ai essayé quelques méthodes que j'ai vues ici, y compris simplement en utilisant Math.round(), mais peu importe ce que je fais, je continue à obtenir des nombres inhabituels.

J'ai une liste de flottants que je traite, le premier de la liste s'affiche sous la forme 1.2975118E7. Qu'est-ce que le E7?

Lorsque j'utilise Math.round(f) (f est le flottant), j'obtiens exactement le même nombre.

Je sais que je fais quelque chose de mal, je ne sais pas quoi.

Je veux juste que les chiffres soient au format x.xx. Le premier nombre doit être 1.30, Etc.

33
lonewookie

1.2975118E7 Est notation scientifique .

1.2975118E7 = 1.2975118 * 10^7 = 12975118

De plus, Math.round(f) renvoie un entier. Vous ne pouvez pas l'utiliser pour obtenir le format souhaité x.xx.

Vous pouvez utiliser String.format .

String s = String.format("%.2f", 1.2975118);
// 1.30
95
Alexander

Si vous recherchez le formatage des devises (que vous n'avez pas spécifié, mais il semble que ce soit ce que vous recherchez), essayez la classe NumberFormat. C'est très simple:

double d = 2.3d;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
String output = formatter.format(d);

Qui affichera (selon les paramètres régionaux):

$2.30

De plus, si la devise n'est pas requise (juste les deux décimales exactes), vous pouvez l'utiliser à la place:

NumberFormat formatter = NumberFormat.getNumberInstance();
formatter.setMinimumFractionDigits(2);
formatter.setMaximumFractionDigits(2);
String output = formatter.format(d);

Qui affichera 2.30

50
kcoppock

Vous pouvez utiliser DecimalFormat pour vous donner le style que vous souhaitez.

DecimalFormat df = new DecimalFormat("0.00E0");
double number = 1.2975118E7;
System.out.println(df.format(number));  // prints 1.30E7

Comme il est en notation scientifique, vous ne pourrez pas obtenir un nombre inférieur à 107 sans perdre autant d'ordres de grandeur de précision.

8
Makoto