Conversão de dados, como proceder?

8 respostas
java
R

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

while (rs.next()) 
{
	float dx = rs.getFloat("ESPEC_MIN");
	if (dx == Math.rint(dx)) 
	{
		int dx2 = (int) dx;
		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"), 
								   dx2, 
								   rs.getString("ESPEC_MAX"), 
								   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 
	{
		double dx2 = dx;
		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"), 
								   dx2, 
								   rs.getString("ESPEC_MAX"), 
								   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")});
	}
}

8 Respostas

A

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;

<a href="//modelo.addRow">//modelo.addRow</a>(new Object[]{informarSeusObjetos});

} else {

double dx2 = dx;

<a href="//modelo.addRow">//modelo.addRow</a>(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

R

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();
ResultSet rs = st.executeQuery(query1);
    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[]{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"),
                dx2,
                rs.getString("ESPEC_MAX"),
                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 {
            double dx2 = dx;
            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"),
                dx2,
                rs.getString("ESPEC_MAX"),
                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")});
        }
    }
    CadTPETabela.getColumnModel().getColumn(0).setMinWidth(0);
    CadTPETabela.getColumnModel().getColumn(0).setMaxWidth(0);
    modelo.isCellEditable(modelo.getColumnCount(), modelo.getRowCount());
    CadTPETabela.setModel(modelo);
} catch (Exception e) {
    JOptionPane.showMessageDialog(null, e);
}

}

A

Se o ESPEC_MAX retorna 0 a coluna espec_max está vazia no banco de dados, ou não há inteiros equivalentes.

Teste esta codificação a seguir:

while (rs.next()) {

float dx = rs.getFloat(ESPEC_MIN);

float especMax = rs.getFloat(ESPEC_MAX);//

if (dx == Math.rint(dx) || especMax == Math.rint(especMax)) {

System.out.println(rs.getInt(id) + " " + ((int) dx) + " " + (int) especMax);

} else {

double dx2 = dx;

}

}

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;

A

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)});

}

}
R

Dessa maneira que você me disse deu certo, mas ele não está me retornando valores com 400.5…
Tenho alguns teste que preciso que retorne com “,”

R

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

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[]{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"),
                        dx2,
                        dx2,
                        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 {
                    double dx2 = dx;
                    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"),
                        dx2,
                        dx2,
                        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")});
                }
            }
A

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

//<strong><em>pega quando min e max são inteiros</em></strong>

if (dx == Math.rint(dx) && especMax == Math.rint(especMax)) {

sMin = (int) dx + “”;

sMax = (int) especMax + “”;

//<strong><em>pega quando somente o min for inteiro</em></strong>

} else if (dx == Math.rint(dx)) {

sMin = (int) dx + “”;

sMax = especMax + “”;

//<strong><em>pega somente quando o max for inteiro</em></strong>

} else if (especMax == Math.rint(especMax)) {

sMin = dx + “”;

sMax = (int) especMax + “”;

//<strong><em>pega se nenhum dos dois for inteiro</em></strong>

} else {

sMin = dx + “”;

sMax = especMax + “”;

}

//considerando a situação atual e a <strong><em>tautologia</em></strong>, 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”)});

}
R

Estava precisando de algo parecido e me ajudou muito. aqui deu certo!

Criado 22 de maio de 2017
Ultima resposta 24 de mai. de 2017
Respostas 8
Participantes 3