Suma valores tipo double "0.1" obtenidos de columas de un JTable
Hola Comunidad Java
Algún tip para resolver este problema que tengo:
Tengo un método que suma los valores tipo double obtenidos de un JTable; el problema que tengo es que no los suma correctamente
algunos de los valores almacenados en el JTable son: (0.10, 0.45, 1.0) expongo a continuación el código del metodo mencionado espero puedan apoyarme
int sum = 0;
double sumDouble = 0;
String sumCal = "";
DecimalFormat formatea = new DecimalFormat("0.00");
DefaultTableModel modelo = (DefaultTableModel) comTabla1.getModel();
for (int i = 0; i < comTabla1.getRowCount(); i++) {
for (int x = 0; x < comTabla1.getColumnCount(); x++) {
switch (x) {
case 1:
int valor1 = Integer.parseInt((String) modelo.getValueAt(i, x));
sum += valor1;
sumCal = String.valueOf(sum);
cTextSumCalCom1.setText(sumCal);
break;
case 2:
double valor = Double.parseDouble((String) modelo.getValueAt(i, x));
sumDouble += valor;
System.out.println(sumDouble);
String sumCal2 ="";
sumCal2 =String.valueOf(sumDouble);
//sumCal2 = formatea.format(sumDouble);
cTextSumProtCom1.setText(sumCal2);
break;
case 3:
double valor2 = Double.parseDouble((String) modelo.getValueAt(i, 3));
sumDouble = sumDouble + valor2;
String sumLip = String.format("%.2f", sumDouble);
cTextSumLipCom1.setText(sumLip);
break;
case 4:
double valor3 = Double.parseDouble((String) modelo.getValueAt(i, 4));
sumDouble = sumDouble + valor3;
String sumCarbs = String.format("%.2f", sumDouble);
cTextSumCarbsCom1.setText(sumCarbs);
break;
default:
break;
}
}
}
}
- Inicie sesión o regístrese para enviar comentarios
Cambio de tipo
Intenta cambiar los tipo
Double
porBigDecimal
.En el case 1 tienes
int
en vez deDouble
también cámbialo de tipo e intenta de nuevo.Cambio Tipo
He cambiado a BigDecimal pero aun no logro que sume correctamente te comparto lo que tengo
En el case 1 no cambie el tipo de dato ya que son int y ahi si me realiza la suma correctamente.
int sum = 0;
double sumDouble = 0.0;
String sumCal = "";
DecimalFormat formatea = new DecimalFormat("0.00");
DefaultTableModel modelo = (DefaultTableModel) comTabla1.getModel();
for (int i = 0; i < comTabla1.getRowCount(); i++) {
for (int x = 0; x < comTabla1.getColumnCount(); x++) {
switch (x) {
case 1:
int valor1 = Integer.parseInt((String) modelo.getValueAt(i, x));
sum += valor1;
sumCal = String.valueOf(sum);
cTextSumCalCom1.setText(sumCal);
break;
case 2:
String valor = String.valueOf((String) modelo.getValueAt(i, x));
BigDecimal resultado = BigDecimal.ZERO;
BigDecimal valorDecimal1 = new BigDecimal(valor);
resultado = resultado.add(valorDecimal1).add(valorDecimal1);
System.out.println(resultado);
String sumCal2 =String.valueOf(resultado);
cTextSumProtCom1.setText(sumCal2);
break;
case 3:
break;
case 4:
break;
default:
break;
}
}
}
}
¿Cuáles son tus
¿Cuáles son tus entradas?
¿Qué resultados deberían de aparecer?
¿Qué resultados son los que aparecen?
Mas info problema
Los campos de la tabla son estos:
alimento Calorias Proteinas
frijoles 322 21.80
Avena 52 0.40
suma los resultados de cada columna en cajas de texto
La columna de calorias suma perfectamente en el case 1
La suma de la columna Proteinas es la que no suma correctamente
21.80 + 0.40 = 22.2
Por consola imprime lo siguiente:
43.60
43.60
0.80
No sé que tanto cambió tu
No sé que tanto cambió tu código del post principal al segundo, pero veo que tienes variables fuera del bloque
switch
, comosum, sumDouble y sumCal
que en el post principal sí usas entre casos, si así tienes tus variables bórralas, y genera tus variables y resultados dentro de cadacase
para evitar que se estén sumando valores que no van.Gracias neko069 ya quedo
Gracias neko069 ya quedo resuelto ahora tengo un problema con un filtro en la misma aplicación pero lo posteare en otro hilo gracias nuevamente.
Usar Siempre Bigdecimal
Para operaciones que involucren decimales siempre siempre usa BigDecimal
Aquí las razones
http://www.javamexico.org/blogs/luxspes/por_que_usar_bigdecimal_y_no_dou...
http://speleotrove.com/decimal/decifaq1.html#tzeros