web-dev-qa-db-fra.com

Comment convertir float en int avec Java

J'ai utilisé la ligne suivante pour convertir float en int, mais ce n'est pas aussi précis que je le souhaiterais:

 float a=8.61f;
 int b;

 b=(int)a;

Le résultat est: 8 (Il devrait s'agir de 9)

Lorsque a = -7.65f, le résultat est: -7 (ce devrait être -8)

Quelle est la meilleure façon de le faire?

295
Frank

Utiliser Math.round() arrondira le flottant au nombre entier le plus proche.

618
tw39124

En fait, il existe différentes façons de descendre float to int, en fonction du résultat que vous souhaitez obtenir: (Pour int i, float f)

  • round (l'entier le plus proche d'un flottant donné)

    i = Math.round(f);
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  2 ; f =  2.68 -> i =  3
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -3
    

    remarque: ceci est, contractuellement, égal à (int) Math.floor(f + 0.5f)

  • tronquer (c'est-à-dire tout laisser après le point décimal)

    i = (int) f;
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  2 ; f =  2.68 -> i =  2
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
    
  • ceil/floor (un entier toujours plus grand/plus petit qu'une valeur donnée si il a une partie décimale)

    i = (int) Math.ceil(f);
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  3 ; f =  2.68 -> i =  3
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
    
    i = (int) Math.floor(f);
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  2 ; f =  2.68 -> i =  2
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -3 ; f = -2.68 -> i = -3
    

Pour arrondir les valeurs positives, vous pouvez également utiliser simplement (int)(f + 0.5), qui fonctionne exactement comme Math.Round dans ces cas (selon la documentation).

En théorie, vous pouvez utiliser Math.rint(f) pour arrondir, mais rint ne pas arrondir 0,5, il arrondit les valeurs, quel que soit le nombre le plus bas ou le plus élevé, même si elle est inutile.

Voir

http://mindprod.com/jgloss/round.html

http://docs.Oracle.com/javase/6/docs/api/Java/lang/Math.html

pour plus d'informations et quelques exemples.

173
vaxquis

Math.round(value) arrondissez la valeur au nombre entier le plus proche.

Utilisation 

1) b=(int)(Math.round(a));

2) a=Math.round(a);  
   b=(int)a;
13

Utilisez Math.round(value), puis après le type, convertissez-le en entier.

float a = 8.61f;
int b = (int)Math.round(a);
5
Sachithra Sewwandi

Math.round renvoie également une valeur entière, vous n'avez donc pas besoin de transtyper.

int b = Math.round(float a);
4
venkat

Quant à moi, plus facile: (int) (a +.5) // a est un float. Retourne la valeur arrondie.

Pas dépendant des types Java Math.round ()

0
Bruno L.