¿Por qué mi código Java me da un resultado incorrecto?

Utilice las matemáticas de coma flotante …

5.0 / 9.0

La matemática entera es el valor predeterminado si no utiliza puntos decimales, por lo que 5/9 es cero.

La división entera cae la parte fraccional, de modo que …

1/2 = 0
2/2 = 1
3/2 = 1
4/2 = 2
5/2 = 2

100/2 = 50
101/2 = 50
102/2 = 51

Por cierto, esto es cierto con la mayoría de los lenguajes de programación, aunque algunos proporcionan una anulación conveniente, como la capacidad de forzar la división de punto flotante mediante el uso de dos barras. Otra forma de lograr esto es lanzar:

(flotante) 5 / (flotante) 9

La verdad es que este es un error tan común que los programadores aprenden a vigilarlo, pero no deberían tener que hacerlo. Entiendo la necesidad de un tipeo estático fuerte, pero esta situación lleva a confusión y errores. Parece que el valor predeterminado para la división de dos enteros podría ser flotante o doble y luego dos barras podrían usarse para forzar la división de enteros. Sí, lo sé, eso significa que el signo de división ya no sería coherente en todos los tipos numéricos, pero estoy dispuesto a sufrir por ello. 🙂

Bueno, 5/9 son números enteros y la división también devolverá un número entero. Para ser precisos, 5/9 = 0. Y 0 veces lo que sea que quede 0.

Cambie 5 a 5.0 y debería devolver la respuesta correcta.

5/9 = 0

5 y 9 son números enteros, por lo que dividir luego resulta en 0. Cuando multiplicas eso hirviendo en f, obtienes 0. Multiplica en su lugar por 5.0 / 9 para obtener un doble.

Para activar esa división como un punto flotante, puede lanzarla o escribirla como (5.0/9.0)