Passando aqui novamente para pedir auxílio aos nobres colegas novamente… :lol:
Seguinte, estou trabalhando no projeto de um middleware, onde o “Pedreiro de software” do sistema legado, resolveu colocar no banco de dados uma coluna do tipo float para armazenar o CNPJ dos clientes (não me pergunte porque :lol: )
O problema é que este tipo está truncando os zeros iniciais dos CNPJs que possuem zero no começo, tendo que ser consertado via programação…
Existe alguma classe que me ajudaria a fazer esta padronização, tipo o DecimalFormat, criar uma mascara de 14 digitos e jogar o número para ser formatado?
Note que %d aceita apenas números int ou long. Se seu número é um Double você pode ter problemas porque um double tem no máximo 15 casas de precisão, e ele requer o formato %f (e se não me engano, %f não aceita o indicador %0 para indicar que você tem de completar com zeros à esquerda.)
regis_hideki
Como é o padrão atual, ou seja, como os CNPJs já inseridos no banco que possuem zeros à esquerda estão armazenados? Isso ajudará a tomar uma decisão.
Não há possibilidade de mudar o tipo dessa coluna e fazer os ajustes necessários? Acho que seria o mais sensato.
Se não há essa possibilidade, uma gambi possível, é convencionar que só são válidos os x primeiros números depois do vírgula (ou ponto).
Z
zerone
regis,
No banco, continuam e irão continuar como float, pois trata-se de um sistema de 1900 e bolinha… :lol:
Infelizmente a maioria que possui zero está truncado no banco.
Estou tentando uma gambiarra utilizando o String format que o entanglement me sugeriu
E
entanglement
O que você chama de “float” é o FLOAT do banco, não o float do Java, certo?
É porque o float do Java tem apenas 6 algarismos significativos de precisão, ou seja, não consegue guardar CPFs (que exigem 11 dígitos) ou CNPJs (que exigem 14 dígitos) de precisão.
M
mozena
Bom dia, zerone !
Recupera a variavel float do banco de dados utilizando o BigDecimal. Isso deve resolver.
//Recupera do Banco de dados como BigDecimal
BigDecimal cnpj = new BigDecimal[telefone removido].00);
//Utiliza o int normal System.out.println( String.format ("%014d", cnpj.intValue() ) );
Abraços.
E
entanglement
Cuidado que um CPF (e com mais razão um CNPJ) não cabe em um int (9 dígitos significativos) - você tem de usar long.
M
mozena
Muito boa observação Entanglement.
Obrigado.
Z
zerone
bom dia rapaziada…
entanglement,
No banco realmente a coluna está como float e trago os dados para uma string utilizando o getLong() do ResultSet.
Estou conseguindo “consertar” com o String format, mas fiz uma nova classe para cuidar da formatação, pois resolveram inventar de guardar CPF/CNPJ no mesmo campo :lol:
Obrigado pela ajuda de todos
E
entanglement
Guardar CPF e CNPJ no mesmo campo, e como um valor numérico, é uma idéia que normalmente se encontra em pessoas que alguma vez na sua vida trabalharam com mainframes (principalmente no setor bancário) onde você tem milhões de clientes e cada byte fazia diferença na hora de definir a estrutura de uma tabela.
O problema é quando você não tem um campo adicional para dizer se o número é um CPF ou CNPJ
ul1sses
Aqui onde trabalho também existe uma tabela com uma mesma coluna para cpf e cnpj.
Pra resolver o problema eu tenho um método que recebe o número e retorna se é cpf ou cnpj e então eu tenho outro método que preenche os zeros à esquerda de acordo com o tipo de identificação, usando simplesmente o método “.insert(0,“0”)” do StringBuilder.
P
pHNino
entanglement:
Guardar CPF e CNPJ no mesmo campo, e como um valor numérico, é uma idéia que normalmente se encontra em pessoas que alguma vez na sua vida trabalharam com mainframes (principalmente no setor bancário) onde você tem milhões de clientes e cada byte fazia diferença na hora de definir a estrutura de uma tabela.
O problema é quando você não tem um campo adicional para dizer se o número é um CPF ou CNPJ
Eu estou passando por esse problema. Eu recebo um campo documento através do XML, mas não tem diferenciação se é CPF ou CNPJ. Como corta os zeros a esquerda, acabo que não tenho como saber qual tipo de documento é.
Tenho procurado, mas não vi nenhuma solução parecida.