En fait, il existe différentes façons de convertir un flottant en int, en fonction du résultat que vous souhaitez obtenir : (pour int i
, float f
)
-
round (le nombre entier le plus proche du 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
note : ce montant est, par contrat, égal à (int) Math.floor(f + 0.5f)
-
tronquer (c'est-à-dire supprimer tout ce qui se trouve 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 nombre entier toujours plus grand/petit qu'une valeur donnée) si il a une partie fractionnaire quelconque)
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 les arrondis positif vous pouvez aussi simplement utiliser (int)(f + 0.5)
qui fonctionne exactement comme Math.Round
dans ces cas (conformément au document).
Vous pouvez également utiliser Math.rint(f)
pour faire le arrondi au nombre entier pair le plus proche Cette méthode peut être utile si vous vous attendez à traiter un grand nombre de flottants dont la partie fractionnaire est strictement égale à 0,5 (notez les éventuels problèmes d'arrondi de l'IEEE), et si vous souhaitez conserver la moyenne de l'ensemble ; vous introduirez cependant un autre biais, où les nombres pairs seront plus fréquents que les impairs.
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.
17 votes
Je dois souligner que le simple typage tronque la valeur et n'effectue aucune opération d'arrondi/de nivellement sur la valeur.