2010-12-07 45 views
52

J'ai deux entiers x et y. J'ai besoin de calculer x/y et comme résultat je voudrais obtenir le flotteur. Par exemple, en tant que résultat de 3/2 je voudrais avoir 1.5. Je pensais que la façon la plus facile (ou la seule) de le faire est de convertir x et y en type flottant. Malheureusement, je ne peux pas trouver un moyen facile de le faire. Pourriez-vous s'il vous plaît m'aider avec ça?Comment convertir un entier en float en Java?

+7

float résultat = ((float) x)/y? – mibollma

+0

vérifier cela: http://xahlee.org/java-a-day/casting.html – fasseg

+2

duplication possible de [Java: diviser 2 ints fait un int?] (Http://stackoverflow.com/questions/787700/ java-diving-2-ints-makes-an-int) – dogbane

Répondre

103

Vous avez juste besoin jeté au moins un des opérandes à un flotteur:

float z = (float) x/y; 

ou

float z = x/(float) y; 

ou (inutile)

float z = (float) x/(float) y; 
+0

Est-ce plus efficace que: float z = (1.0 * x)/y; ? La conversion flottante est-elle plus efficace en interne que la multiplication? Tnx! – MSquare

+1

Je ne sais pas, mais je pense que ce n'est pas pertinent 99% ou plus du temps. Cela ne va même pas être un goulot d'étranglement. Si vous êtes vraiment concerné, [comparez-le vous-même.] (Http://stackoverflow.com/q/504103/139010) –

+1

Le premier et le second provoqueront des erreurs sur certains dispositifs de bras, assurez-vous de lancer les deux entiers. –

3

Voici comment vous pouvez le faire:

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    int x = 3; 
    int y = 2; 
    Float fX = new Float(x); 
    float res = fX.floatValue()/y; 
    System.out.println("res = "+res); 
} 

À bientôt!

+7

L'utilisation d'un type de wrapper ('Float') est totalement inutile pour cela. –

+0

Vous avez totalement raison, votre réponse est beaucoup mieux :) – LaGrandMere

+1

S'il vous plaît [ne pas utiliser les signatures ou les slogans] (http://stackoverflow.com/faq#signatures) dans vos messages. – meagar

5

Vous ne devez pas utiliser float à moins d'y être obligé. Dans 99% des cas, le double est un meilleur choix.

int x = 1111111111; 
int y = 10000; 
float f = (float) x/y; 
double d = (double) x/y; 
System.out.println("f= "+f); 
System.out.println("d= "+d); 

impressions

f= 111111.12 
d= 111111.1111 

Suite @ commentaire de Matt.

float a très peu de précision (6-7 chiffres) et montre une erreur d'arrondi significative assez facilement. double a encore 9 chiffres de précision. Le coût d'utilisation du double au lieu du flottant est notionnel dans 99% des cas, mais le coût d'un bug subtil en raison d'une erreur d'arrondi est beaucoup plus élevé. Pour cette raison, de nombreux développeurs recommandent de ne pas utiliser de virgule flottante et recommandent fortement BigDecimal.

Cependant, je trouve que le double peut être utilisé dans la plupart des cas fourni arrondi sensible est utilisé.

Dans ce cas, int x a une précision de 32 bits alors que float a une précision de 24 bits, même une division par 1 pourrait avoir une erreur d'arrondi. D'un autre côté, le double a une précision de 53 bits, ce qui est plus que suffisant pour obtenir un résultat raisonnablement précis.

+3

Vous devriez élaborer sur _why_ 'double' est meilleur que' float'. –

1

Sameer: ​​

float l = new Float(x/y) 

ne fonctionnera pas, car il calcule la division entière de x et y d'abord, puis construire un flotteur de celui-ci.

float result = (float) x/(float) y; 

Est sémantiquement le meilleur candidat.

+0

Votre réponse aurait du être un commentaire. Sameer ne recevra aucune notification de votre publication. Sémantiquement, convertir les deux ints pour qu'ils flottent avant de calculer le résultat est inutile - donc ce n'est pas mieux, que de transformer un seul. Il donne une fausse impression, et est donc inférieur, à mon humble avis. –

4

Vous avez juste besoin de transférer la première valeur à flotter, avant qu'il ne soit impliqué dans d'autres calculs:

float z = x * 1.0/y; 
3

// L'entier que je veux convertir

int myInt = 100; 

// Fonderie d'entier flotter

float newFloat = (float) myInt