Alguém sabe me dizer como faço para acrescentar mais um dado para conversão nesse código?
No caso eu estou transformandoESPEC_MIN de float para Double. Queria transformar também a ESPEC_MAX
Observações:
1 - O título da postagem não ajuda em nada.
2 - Creio que a consulta sql esta correta pois dentro do if vc faz a adição do valor retornado pelo espec_max em modelo.addRow(…);
Assim, se a consulta esta correta, basta repetir o que voce fez, e alterar a condição if de acordo com sua necessidade, pois é desconhecida.
3 - Seria interessante antes você ter esclarecido que a variável rs é um Result Set decorrente de uma sentença sql, pois poderia ser uma classe que você criou com métodos a seu entendimento.
Então veja uma codificação semelhante ao que aparentemente você está solicitando:
//rs = resultSet de gerado por uma sentença sql
while (rs.next()) {
float dx = rs.getFloat(“ESPEC_MIN”);
float especMax = rs.getFloat(“ESPEC_MAX”);//
if (dx == Math.rint(dx) || especMax == Math.rint(especMax)) {
int dx2 = (int) dx; //modelo.addRow(new Object[]{informarSeusObjetos});
} else {
double dx2 = dx; //modelo.addRow(new Object[]{informarSeusObjetos});
}
}
Por fim:
Você não transformou ESPEC_MIN de float para double, o que foi realizado na verdade é uma comparação dentro do if, para saber se um número do tipo float tem seu equivalente em inteiro, não foi uma conversão e sim uma comparação.
Na linha int dx2 = (int) dx; ocorre uma conversão, mas é de float para int e não para double.
Em resumo, na sua condificação a condição if quer apenas o valor de dx que tenha seu correspondente em inteiro. XD
Fiz as alterações em que você me indicou, mas mesmo assim apenas o ESPEC_MIN esta retornando o valor corretamente. segue o código completo para vê se você possa me dar mais uma orientação.
private void PreencherTabela() {
try {
modelo.setNumRows(0);
Class.forName(driver);
Connection con = DriverManager.getConnection(url, user, pass);
String query1 = “Select id_ct,”
+ “ORDEM, CDLINHA, TCPERFIL,EQUIPAMENTO, DESCTESTE, TCTESTE, TIPO, ESPEC_MIN, ESPEC_MAX, ESPEC_UNID, ESPEC_TEXTO,REFERENCIA, FREQUENCIA, FREQ_UNID, PRODUTO, ORIGEM, LAB from Cadastro_Testes ORDER BY ORDEM asc”;
Statement st = con.createStatement();
Eu criei uma table teste e retornou os dados normalmente.
Veja no banco de dados a coluna espec_max, acho que ela esta vazia, ou não possui valores inteiros, ai é só povoar as colunas e tentar novamente.
É so fazer select espec_max from sua_table;
Fiz um post anterior pra consulta de uma olhada.
O problema é no banco de dados, a tabela não esta com a coluna espec_max devidamente preenchida.
Teste -> select espec_max from sua_table.
O retorno será vazio ou não há float que gere um inteiro (ex. 7.0).
Use este while abaixo com pequenas melhorias:
while (rs.next()) {
float dx = rs.getFloat(“ESPEC_MIN”);
float especMax = rs.getFloat(“ESPEC_MAX”);//
if (dx == Math.rint(dx) || especMax == Math.rint(especMax)) {
modelo.addRow(new Object[]{rs.getInt(“id_ct”),
rs.getString(“ORDEM”),
rs.getString(“CDLINHA”),
rs.getString(“TCPERFIL”),
rs.getString(“EQUIPAMENTO”),
rs.getString(“DESCTESTE”),
rs.getString(“TCTESTE”),
rs.getString(“TIPO”),
rs.getInt(“ESPEC_MIN”),//o rs.getInt vai economizar linhas pois a validação foi feita no if
rs.getInt(“ESPEC_MAX”),//o rs.getInt vai economizar linhas pois a validação foi feita no if
rs.getString(“ESPEC_UNID”),
rs.getString(“ESPEC_TEXTO”),
rs.getString(“REFERENCIA”),
rs.getInt(“FREQUENCIA”),
rs.getString(“FREQ_UNID”),
rs.getString(“PRODUTO”),
rs.getString(“ORIGEM”),
rs.getString(“LAB”)});
} else {
modelo.addRow(new Object[]{rs.getInt(“id_ct”),
rs.getString(“ORDEM”),
rs.getString(“CDLINHA”),
rs.getString(“TCPERFIL”),
rs.getString(“EQUIPAMENTO”),
rs.getString(“DESCTESTE”),
rs.getString(“TCTESTE”),
rs.getString(“TIPO”),
rs.getInt(“ESPEC_MIN”),//o rs.getInt vai economizar linhas pois a validação foi feita no if
rs.getInt(“ESPEC_MAX”),//o rs.getInt vai economizar linhas pois a validação foi feita no if
rs.getString(“ESPEC_UNID”),
rs.getString(“ESPEC_TEXTO”),
rs.getString(“REFERENCIA”),
rs.getInt(“FREQUENCIA”),
rs.getString(“FREQ_UNID”),
rs.getString(“PRODUTO”),
rs.getString(“ORIGEM”),
rs.getString(“LAB”)});
}
}
Addler, fiz alguns testes aqui e deu certo esse código, mas oq acontece… quando eu faço alteração 150.5 no MIN e 160.5 no MAX… ele altera normalmente. Mas se eu fizer só em 1 que no caso ou no MIN ou no MAX, ele não salva com a alteração.
OBS: ele só está salvando com a " , ", quando eu faço alteração nos 2
Vc vai precisar modificar o if para atender a sua necessidade.
Veja a sequência de if dentro do while, está pegando tudo, assim você deve remover o if que não precisar:
while (rs.next()) {
float dx = rs.getFloat(“ESPEC_MIN”);
float especMax = rs.getFloat(“ESPEC_MAX”);//
String sMin, sMax;
//Todas as combinações possiveis para este caso
//pega quando min e max são inteiros
if (dx == Math.rint(dx) && especMax == Math.rint(especMax)) {
sMin = (int) dx + “”;
sMax = (int) especMax + “”;
//pega quando somente o min for inteiro
} else if (dx == Math.rint(dx)) {
sMin = (int) dx + “”;
sMax = especMax + “”;
//pega somente quando o max for inteiro
} else if (especMax == Math.rint(especMax)) {
sMin = dx + “”;
sMax = (int) especMax + “”;
//pega se nenhum dos dois for inteiro
} else {
sMin = dx + “”;
sMax = especMax + “”;
}
//considerando a situação atual e a tautologia, não tem que chamar modelo.addRow(…) dentro do if
modelo.addRow(new Object[]{rs.getInt(“id_ct”),
rs.getString(“ORDEM”),
rs.getString(“CDLINHA”),
rs.getString(“TCPERFIL”),
rs.getString(“EQUIPAMENTO”),
rs.getString(“DESCTESTE”),
rs.getString(“TCTESTE”),
rs.getString(“TIPO”),
sMin,//promova melhorias que identificar
sMax,//o rs.getInt vai economizar linhas pois a validação foi feita no if
rs.getString(“ESPEC_UNID”),
rs.getString(“ESPEC_TEXTO”),
rs.getString(“REFERENCIA”),
rs.getInt(“FREQUENCIA”),
rs.getString(“FREQ_UNID”),
rs.getString(“PRODUTO”),
rs.getString(“ORIGEM”),
rs.getString(“LAB”)});
}