Hola Basmang_15, el tema no es simple, pero por lo que estas haciendo seguramente lo comprendes y verás que es fácil. Hasta donde sabrás los números se guardan en formato binario. Y aquí está el problema.
El 1 se almacena exactamente como es, pero algunos otros números en clave decimal como 0.1 no se pueden grabar de manera exacta en binario.
Lo mismo te esta pasando con 1/3 que en decimal se convierte en 0.33333..., el número 1/10 (10 en notación decimal, no 10 binario) se convierte en periodico al ser expresado en binario: 0.1 (decimal) = .0001100011000111000111... (binario).
Y acá está el tema, éste número se redondea por 2.79E-17 (o algo así) porque la pc lo recortará al número de bits máximos que va a usar.
Así que la manera es reducir los periodicos, algo así:
Código:
uno = numberFormat( (-10 / 3 ),4);
dos = numberFormat( 5 * ( 2 / 3 ),4) ;
Claro que esto puede romper el exacto (puedes usar DecimalFormat), pero para tu caso me parece que lo solucionará.
Saludos, y espero no haberte mareado.