Completar zeros de uma String

11 respostas
Z

Boa tarde galera, blz?

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?

vlw
:stuck_out_tongue:

11 Respostas

E

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); // [telefone removido]
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.)

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

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 :stuck_out_tongue:

E

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

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

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

Muito boa observação Entanglement.

Obrigado.

Z

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 :cry: :lol:

Obrigado pela ajuda de todos :wink:

E

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 :frowning:

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

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 :frowning:

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.

Criado 11 de julho de 2012
Ultima resposta 14 de jul. de 2014
Respostas 11
Participantes 6