2010-12-07 27 views
52

Tengo dos enteros x y y. Necesito calcular x/y y como resultado me gustaría obtener flotación. Por ejemplo, como resultado de 3/2 me gustaría tener 1.5. Pensé que la forma más fácil (o la única) de hacerlo es convertir x y y en tipo flotante. Lamentablemente, no puedo encontrar una manera fácil de hacerlo. ¿Podrías por favor ayudarme con eso?¿Cómo puedo convertir un número entero en float en Java?

+7

flotar resultado = ((float) x)/y? – mibollma

+0

mira esto: http://xahlee.org/java-a-day/casting.html – fasseg

+2

posible duplicado de [Java: dividir 2 ints hace un int?] (Http://stackoverflow.com/questions/787700/ java-dividing-2-ints-makes-an-int) – dogbane

Respuesta

103

Sólo tiene que fundido al menos uno de los operandos a un flotador:

float z = (float) x/y; 

o

float z = x/(float) y; 

o (innecesaria)

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

¿Es esto más eficiente que: float z = (1.0 * x)/y; ? ¿La conversión flotante es internamente más eficiente que la multiplicación? Tnx! – MSquare

+1

No lo sé, pero creo que es irrelevante el 99% o más del tiempo. Ni siquiera remotamente va a ser un cuello de botella. Si realmente estás preocupado, [compáralo tú mismo.] (Http://stackoverflow.com/q/504103/139010) –

+1

El primero y el segundo causarán errores en ciertos dispositivos de brazo, asegúrate de convertir ambos enteros. –

3

Aquí es cómo usted puede hacerlo:

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); 
} 

¡Te veo!

+7

El uso de un tipo de envoltura ('Float') es totalmente innecesario para esto. –

+0

Tiene toda la razón, su respuesta es mucho mejor :) – LaGrandMere

+1

Por favor [no use firmas o eslóganes] (http://stackoverflow.com/faq#signatures) en sus publicaciones. – meagar

5

No debe usar flotador a menos que sea necesario. En el 99% de los casos, el doble es una mejor opción.

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); 

impresiones

f= 111111.12 
d= 111111.1111 

Siguiendo @ comentarios de Matt.

flotador tiene muy poca precisión (6-7 dígitos) y muestra un error de redondeo significativo con bastante facilidad. double tiene otros 9 dígitos de precisión. El costo de usar double en lugar de float es teórico en el 99% de los casos, sin embargo, el costo de un error sutil debido al error de redondeo es mucho mayor. Por esta razón, muchos desarrolladores recomiendan no usar ningún punto flotante y recomiendan BigDecimal.

Sin embargo me parece que el doble se puede utilizar en la mayoría de los casos proporcionado redondeo sensible se utiliza.

En este caso, int x tiene una precisión de 32 bits mientras que el flotador tiene una precisión de 24 bits, incluso dividir por 1 podría tener un error de redondeo. Double, por otro lado, tiene una precisión de 53 bits, que es más que suficiente para obtener un resultado razonablemente preciso.

+3

Debería dar más detalles sobre _por qué_ 'double' es mejor que' float'. –

1

Sameer: ​​

float l = new Float(x/y) 

no funcionará, ya que calcular la división entera de X e Y primero, a continuación, construir un flotador de ella.

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

Es semánticamente el mejor candidato.

+0

Tu respuesta debería haber sido un comentario. Sameer no recibirá ninguna notificación de tu publicación. Semánticamente, la conversión de ambos puntos para flotar antes de calcular el resultado es innecesaria; por lo tanto, no es mejor que transformar uno solo. Da una impresión equivocada, y por lo tanto es inferior, yo. –

4

sólo tiene que transferir el primer valor de flotar, antes de que se involucra en otros cálculos:

float z = x * 1.0/y; 
3

// El número entero Quiero convertir

int myInt = 100; 

// Fundición de número entero flotar

float newFloat = (float) myInt 
Cuestiones relacionadas