¿Cómo puedo convertir un entero en flotante en Java?

81

Tengo dos enteros xy y. Necesito calcular x/yy, como resultado, me gustaría flotar. Por ejemplo, como resultado de 3/2me gustaría tener 1.5. Pensé que la forma más fácil (o la única) de hacerlo es convertir xy yen tipo flotante. Desafortunadamente, no puedo encontrar una manera fácil de hacerlo. ¿Podrías ayudarme con eso?

romano
fuente
7
resultado flotante = ((flotante) x) / y?
mibollma
mira
fasseg
2
posible duplicado de Java: dividir 2 ints hace un int?
dogbane
1
@VinAy: Yo no recomendaría que, en este caso. BigDecimalno es un reemplazo universalmente correcto de float.
Matt Ball
1
@VinAy: Depende completamente de cuál sea el propósito. Si se dedica a las finanzas, tienes razón. Si él está calculando trayectorias de asteroides, usted no lo está.
Marqués de Lorne

Respuestas:

151

Solo necesita lanzar al menos uno de los operandos a un flotante:

float z = (float) x / y;

o

float z = x / (float) y;

o (innecesario)

float z = (float) x / (float) y;
Matt Ball
fuente
¿Es esto más eficiente que: float z = (1.0 * x) / y; ? ¿Es la conversión flotante internamente más eficiente que la multiplicación? Tnx!
MSquare
1
No lo sé, pero creo que es irrelevante el 99% o más de las veces. Ni remotamente va a ser un cuello de botella. Si realmente está tan preocupado, compárelo usted mismo.
Matt Ball
1
El primero y el segundo causarán errores en ciertos dispositivos de brazo, asegúrese de lanzar ambos números enteros.
Oliver Dixon
java.lang.Integer no se puede convertir a java.lang.Float
asp
2
@ user3002853 lea sobre tipos en caja frente a primitivas. docs.oracle.com/javase/tutorial/java/data/autoboxing.html
Matt Ball
5

No debe usar flotar 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);

huellas dactilares

f= 111111.12
d= 111111.1111

Siguiendo el comentario de @ Matt.

float 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 a un error de redondeo es mucho mayor. Por esta razón, muchos desarrolladores recomiendan no usar punto flotante en absoluto y recomiendan encarecidamente BigDecimal.

Sin embargo, encuentro que el doble se puede usar en la mayoría de los casos siempre que se use un redondeo sensato .

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

Peter Lawrey
fuente
6
Debería explicar por qué double es mejor que float.
Matt Ball
5

Solo necesita transferir el primer valor a flotar, antes de que se involucre en más cálculos:

float z = x * 1.0 / y;
usuario desconocido
fuente
4

// El entero que quiero convertir

int myInt = 100;

// Casting de entero para flotar

float newFloat = (float) myInt
tej shah
fuente
1
en Android Studio al menos, el compilador se quejará de tipos incompatibles que intentan hacer esto.
Adam R. Turner
3

Aquí sabrás como podrás 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);
}

Nos vemos !

LaGrandMere
fuente
7
El uso de un tipo de contenedor ( Float) es totalmente innecesario para esto.
Matt Ball
1
Por favor, no use firmas o frases en sus mensajes.
meagar
1

Sameer:

float l = new Float(x/y)

no funcionará, ya que calculará la división entera de xey primero, luego construirá un flotante a partir de ella.

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

Es semánticamente el mejor candidato.

LostOblivion
fuente
Tu respuesta debería haber sido un comentario. Sameer no recibirá ninguna notificación de su publicación. Semánticamente, no es necesario convertir ambos ints para que floten antes de calcular el resultado; por lo tanto, no es mejor que transformar solo uno. Da una impresión errónea y, por lo tanto, es inferior, en mi humilde opinión.
usuario desconocido