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?
Utiliser Math.round()
arrondira le flottant au nombre entier le plus proche.
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.
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;
Utilisez Math.round(value)
, puis après le type, convertissez-le en entier.
float a = 8.61f;
int b = (int)Math.round(a);
Math.round renvoie également une valeur entière, vous n'avez donc pas besoin de transtyper.
int b = Math.round(float a);
Quant à moi, plus facile: (int) (a +.5) // a est un float. Retourne la valeur arrondie.
Pas dépendant des types Java Math.round ()