Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

-rafael-

[Resolvido] exibir dados assim 0.000.000

Recommended Posts

ola a todos

 

tenho o seguinte dado no meu banco:

 

123456

 

ai para exibir ele com os ponto eu uso

 

preg_replace("/([0-9]{1,2})([0-9]{2,3})([0-9]{3})/","\\1.\\2.\\3",$dados['num'])

 

e o resultado é

 

123.456

 

acontece que ja esta em vias de acrescentar mais um algarismo neste número (virando a casa do milhão), sendo que o mesmo ficaria

 

1234567

 

eu tentei

 

preg_replace("/([0-9]{1,2})([0-9]{2,3})([0-9]{3})/","\\1.\\2.\\3",$dados['num'])

e o reultado 12.34.567

 

 

eu tentei

 

preg_replace("/([0-9]{1,2})([0-9]{3})([0-9]{3})/","\\1.\\2.\\3",$dados['num'])

e o reultado 1.234.567, mas ai os números de 6 algarismos ficam sem o ponto 123456

 

ha tambem o problema de números com traços

 

ex: 1.234.567-8, 123.456-7 (são outros tipos de numeros, diferentes dos que eu citei acima)

 

como posso resolver isso??

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

são numeros de um sistema da empresa

 

eles estao armazenados em formato numero no banco.

 

entao, o numero sem '-' é para uma coisa e com o '-' para outra.

 

os numeros sem -, ta resolvido

 

o problema agora é os com o -

 

com o preg_replace nao dei conta

 

obrigado pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

não existe um padrao extamente.

 

é um numero sequencial - digito verificador

 

acontece que é armazenado tudo junto no banco

 

entao o numero 1.234.567-8

 

vai para o banco 12345678

 

essa parte é facil, é so remover os pontos e traços com ERs.

 

mas o duro é coloca-los de volta para exibir na tela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim, tio.

 

Resultado desejado: 0.000.000

String de exemplo: 8777123

 

Código:

 

<?php
$string = '8777123'; //deve tornar-se: 8.777.123
echo preg_replace('/^([0-9])([0-9]{3})([0-9]{3})$/','$1.$2.$3',$string);
?>

Resultado: http://haxor.com.br/imasters/

 

EDIT: Foi mal, não tinha lido todo o post. No título você colocou um padrão, e na discussão surgiu essa história de dígito verificador. Nesse caso faça assim:

 

<?php
$string = '8777123';
$string = preg_replace('/^([0-9])([0-9]{3})([0-9]{3})([0-9])?$/','$1.$2.$3-$4',$string);
echo ($string[strlen($string)-1]=='-') ? substr($string,0,-1) : $string;
?>

Resultado: 8.777.123

 

-----

 

<?php
$string = '87771238'; //APENAS ADICIONEI O NUMERO 8 AQUI
$string = preg_replace('/^([0-9])([0-9]{3})([0-9]{3})([0-9])?$/','$1.$2.$3-$4',$string);
echo ($string[strlen($string)-1]=='-') ? substr($string,0,-1) : $string;
?>

Resultado: 8.777.123-8 ( http://haxor.com.br/imasters/index2.php )

 

Resumindo: Se tiver digito verificador, ele separa com traco. Senão não exibe o dígito, nem o traço.

 

Caso o número de caracteres seja dinâmico, existe outra maneira de se fazer:

Retira o último dígito da string com substr, com o restante da string use number_format ou preg_replace, e depois adicione esse dígito retirado novamente, já com o traço.

Isso é bem fácil, basta você ver o problema como um TODO e ter calma para resolver.

 

Tchauzin :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok

 

entendi a lógica

 

fiz uma função para fazer o serviço

 

segue:

 


function formata_num($numero){
	
	$num = substr($numero, 0, -1);
	$dig = substr($numero, -1);
	
	$num = number_format($num, 0, '', '.');
	
	$num_f = $num . '-' . $dig;
	
	return $num_f;
	
}

 

obrigado a todos!!!

 

resolvido!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.