es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de Java/inconsistencia al agregar valores float e int

Verifica este código:

    public static void checkBug() {
        int a = 16763383;
        int b = 16763383;

<pre><code>    float myFloat = 222778.0f;
    int myInt = 222778;

    a += myInt;
    b += myFloat;
    System.out.println("A is : " + a + " and B is: " + b);
}
</code></pre>

El resultado es A is : 16986161 and B is: 16986160

¿Por qué esta discrepancia? He estado probando con muchos valores de a, b, myFloat y myInt, pero no pude encontrar una explicación adecuada de por qué ocurre con estos valores particulares.
Además, puedo ejecutar/compilar b += myFloat; pero no puedo hacerlo con b = b + myFloat;.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La discrepancia ocurre debido a la diferencia de precisión entre los valores de punto flotante y los valores enteros. En este código, se añade myInt a a, lo que resulta en un valor entero. Sin embargo, se añade myFloat a b, lo que resulta en un valor de punto flotante. Cuando se imprime los resultados, el valor de a es la suma esperada de los dos enteros, mientras que el valor de b tiene una pequeña discrepancia debido a la limitada precisión de los valores de punto flotante.

    En cuanto a la segunda pregunta, es posible que el operador += esté siendo sobrecargado para manejar la adición de un valor de punto flotante a una variable entera, mientras que el operador + requiere una conversión explícita entre los dos tipos de datos. Esto explicaría por qué b += myFloat; compila y se ejecuta correctamente, mientras que b = b + myFloat; resulta en un error de compilación.

Comments are closed.