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
(Ça devrait être 9
)
Quand a = -7.65f
, le résultat est: -7
(ça devrait être -8
)
Quelle est la meilleure façon de procéder?
java
floating-point
int
Franc
la source
la source
Réponses:
L'utilisation
Math.round()
arrondira le flottant à l'entier le plus proche.la source
Math.round()
renvoie uneint
valeur, donc le transtypage en utilisant(int)
est redondant.(int)foo
est plus simple.En fait, il existe différentes façons de downcast float to int, selon le résultat que vous souhaitez obtenir: (pour int
i
, floatf
)round (l'entier le plus proche du flottant donné)
note: c'est, par contrat, égal à
(int) Math.floor(f + 0.5f)
tronquer (c'est-à-dire supprimer tout après le point décimal)
plafond / plancher (un entier toujours plus grand / plus petit qu'une valeur donnée s'il a une partie fractionnaire)
Pour arrondir les valeurs positives , vous pouvez également simplement utiliser
(int)(f + 0.5)
, qui fonctionne exactement commeMath.Round
dans ces cas (selon la doc).Vous pouvez également utiliser
Math.rint(f)
pour effectuer l' arrondi à l'entier pair le plus proche ; il est sans doute utile si vous prévoyez de traiter un grand nombre de flotteurs avec une partie fractionnaire strictement égale à 0,5 (notez les éventuels problèmes d'arrondi IEEE) et que vous souhaitez conserver la moyenne de l'ensemble en place; vous introduirez un autre biais, où les nombres pairs seront plus courants que les nombres impairs, cependant.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.
la source
Math.round(value)
arrondissez la valeur au nombre entier le plus proche.Utilisation
la source
Math.round renvoie également une valeur entière, vous n'avez donc pas besoin de transtyper.
la source
Utilisez
Math.round(value)
ensuite après le type, transformez-le en entier.la source
Quant à moi, plus facile: (int) (a +.5) // a est un flotteur. Renvoie la valeur arrondie.
Ne dépend pas des types Java Math.round ()
la source
-(int) ( PI / 3 )
: essayez votre code avec un négatifa
... depuis quand-0.5
arrondit à0
?