Diferencia entre revisiones de «Double»

De Dos Ideas.
Saltar a: navegación, buscar
(Ejemplo de imprecisión)
Línea 7: Línea 7:
 
El siguiente código de un test [[JUnit]] demuestra la impresición del double. El código parte de un double en 0, y le suma 10 veces el valor "0.1". Durante cada suma se imprime el valor obtenido, y al final se espera obtener el valor "1". Este test falla.  
 
El siguiente código de un test [[JUnit]] demuestra la impresición del double. El código parte de un double en 0, y le suma 10 veces el valor "0.1". Durante cada suma se imprime el valor obtenido, y al final se espera obtener el valor "1". Este test falla.  
  
<pre>
+
<code java>
 
  @Test
 
  @Test
 
  public void sumarHastaUno() {
 
  public void sumarHastaUno() {
Línea 20: Línea 20:
 
     assertEquals(1, a);
 
     assertEquals(1, a);
 
  }
 
  }
</pre>
+
</code>
  
 
Por consola se puede ver este resultado:  
 
Por consola se puede ver este resultado:  

Revisión del 19:34 17 ago 2008

Cada tipo numérico tiene su propia clase de objetos. Así el tipo double tiene el objeto Double. Este tipo primitivo sigue el estándard IEEE 754.

Imprecisión

El double es naturalmente impreciso, por lo cual no debe utilizarse para operaciones financieras o que requieran precisión. Es preferible utilizar clases precisas para el manejo de números con coma flotante, como el BigDecimal.

Ejemplo de imprecisión

El siguiente código de un test JUnit demuestra la impresición del double. El código parte de un double en 0, y le suma 10 veces el valor "0.1". Durante cada suma se imprime el valor obtenido, y al final se espera obtener el valor "1". Este test falla.

@Test
public void sumarHastaUno() {
    double a = 0.0;
     
    for (int i = 0; i < 10; i++) {
        a = a + 0.1;
        System.out.println(a);
    }
    
    //este assert fallará, por la imprecisión natural de los double 
    assertEquals(1, a);
}

Por consola se puede ver este resultado:

0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999

Ver también