Es un problema ya viejo que todavía Java no quiere desprenderse del todo por asuntos de compatibilidad con versiones viejas, el bendito problema del "Double" o numero Double, este tipo de variable númerica, no tiene exactitud en los cálculos y no solo eso, es muy difícil manipularla, por eso nació hace algun tiempo la clase BigDecimal, que si Dios quiere pronto sustiuira a la clase Double, de hecho ya cuenta con un extenso soporte de documentación en la página de Oracle.
A raíz de esto, les comparto esta pequeña calculadora que resuelve estos problemas, y que además retorna los valores con dos decimales aunque pudieran mostrar muchos más. Además trabaja con String para más comodidad con los TextField(), etc...
package Utilidad;
import java.math.BigDecimal;
/**
*
* author JesusEnTiConfio
*/
public class Calculadora {
public String multiplicar(String valor1,String valor2){
BigDecimal deci1=new BigDecimal (Double.parseDouble(valor1));
BigDecimal deci2=new BigDecimal (Double.parseDouble(valor2));
deci1=deci1.setScale(2,BigDecimal.ROUND_HALF_UP);
deci2=deci2.setScale(2,BigDecimal.ROUND_HALF_UP);
BigDecimal resultado=deci1.multiply(deci2);
resultado=resultado.setScale(2,BigDecimal.ROUND_HALF_UP);
return resultado+"";
}
public String sumar(String valor1,String valor2){
BigDecimal deci1=new BigDecimal (Double.parseDouble(valor1));
BigDecimal deci2=new BigDecimal (Double.parseDouble(valor2));
deci1=deci1.setScale(2,BigDecimal.ROUND_HALF_UP);
deci2=deci2.setScale(2,BigDecimal.ROUND_HALF_UP);
BigDecimal resultado=deci1.add(deci2);
return resultado.toString();
}
public String restar(String valor1,String valor2){
BigDecimal deci1=new BigDecimal (Double.parseDouble(valor1));
BigDecimal deci2=new BigDecimal (Double.parseDouble(valor2));
deci1=deci1.setScale(2,BigDecimal.ROUND_HALF_UP);
deci2=deci2.setScale(2,BigDecimal.ROUND_HALF_UP);
BigDecimal resultado=deci1.subtract(deci2);
return resultado.toString();
}
public String dividir(String valor1,String valor2){
BigDecimal deci1=new BigDecimal (Double.parseDouble(valor1));
BigDecimal deci2=new BigDecimal (Double.parseDouble(valor2));
BigDecimal resultado=deci1.divide(deci2,2,BigDecimal.ROUND_HALF_UP);
return resultado+"";
}
}
Dios los bendiga