web-dev-qa-db-fra.com

Comment lancer un double sur un int en Java en l'arrondissant?

Je dois lancer un double sur un int en Java, mais la valeur numérique doit toujours être arrondie. c'est-à-dire 99.99999999 -> 99

66
badpanda

Casting à un int supprime implicitement toute décimale. Pas besoin d'appeler Math.floor () (en supposant des nombres positifs)

Il suffit de classer avec (int), par exemple:

System.out.println((int)(99.9999)); // Prints 99

Ceci étant dit, il a un comportement différent de Math.floor qui tourne vers l'infini négatif (@Chris Wong)

128
Xorlev

Pour convertir un double en int et le faire arrondir au nombre entier le plus proche _ _ _ (contrairement au (int)(1.8) et au (int)(1.2) typiques, qui «arrondiront» vers 0 et renverront 1), ajoutez simplement 0.5 au double que vous allez transtyper en un int.

Par exemple, si nous avons

double a = 1.2;
double b = 1.8;

Ensuite, les expressions de transtypage suivantes pour x et y et renverront les valeurs arrondies (x = 1 et y = 1):

int x = (int)(a);   // This equals (int)(1.2) --> 1
int y = (int)(b);   // This equals (int)(1.8) --> 1

Mais en ajoutant 0,5 à chacun, nous obtiendrons le résultat arrondi au nombre entier le plus proche} _ que nous pouvons désirer dans certains cas (x = 1 et y = 2):

int x = (int)(a + 0.5);   // This equals (int)(1.8) --> 1
int y = (int)(b + 0.5);   // This equals (int)(2.3) --> 2

Comme petite note, cette méthode vous permet également de contrôler le seuil auquel double est arrondi vers le haut ou le bas lors de la conversion de (int)

(int)(a + 0.8);

à transtyper. Cela arrondira uniquement à (int)a + 1 chaque fois que les valeurs décimales sont supérieures ou égales à 0,2. C'est-à-dire qu'en ajoutant 0,8 à double immédiatement avant la transtypage, 10,15 et 10,03 seront arrondis à 10 lors de la transposition de (int), mais 10,23 et 10,7 seront arrondis à 11.

27
JavaDrip

(int) 99.99999

Sera 99. Lancer un double sur un int ne arrondit pas, il jettera la fraction.

17
leeeroy
Math.floor(n)

où n est un double. Cela retournera un double, semble-t-il, alors assurez-vous de le transtyper après.

11
Austin Fitzpatrick

Cela fonctionne bien int i = (int) dbl;

5
fastcodejava

essayez avec ça, c'est simple 

double x= 20.22889909008;
int a = (int) x;

this will return a=20

ou essayez avec ceci: -

Double x = 20.22889909008;
Integer a = x.intValue();

this will return a=20

ou essayez avec ceci: -

double x= 20.22889909008;
System.out.println("===="+(int)x);

this will return ===20

peut-être que ce code vous aidera.

1
Amitsharma

Dans cette question:

1.La diffusion en double en entier est une tâche très facile.

2.Mais la valeur double n’est pas arrondie à la décimale la plus proche. Par conséquent, le casting peut être fait comme ceci:

double d=99.99999999;
int i=(int)d;
System.out.println(i);

et il imprimera 99, mais l’arrondi n’a pas été fait.

Ainsi, pour arrondir, nous pouvons utiliser,

double d=99.99999999;
System.out.println( Math.round(d));

Ceci imprimera la sortie de 100.

0
R.Nish

Essayez d'utiliser Math.floor.

0
John