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?
Tem uma forma bem estúpida que é a de pegar o tal número e imprimi-lo com zeros à esquerda, usando %011d ou %014d.
Vamos dar um exemplo besta.
long x = 12345678901L;
String cpf = String.format ("%011d", x); // 12345678901
String cnpj = String.format ("%014d", x); // 00012345678901
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.)
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.
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:
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
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.
[quote=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
[/quote]
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.