/** 
* Formata uma sequencia numérica incluindo os separadores de 
* decimais e de milhares 
* Funciona de forma análoga a number_format, com exceção de que recebe 
* uma string ao invés de um float e os valores default para separadores de 
* decimais e milhares estão no formato brasileiro 
* 
* @param mixed $number O valor a ser formatado 
* @param int $decimais A quantidade de casas decimais (default 2) 
* @param [string $separador_decimal=','] O separador de decimais 
* @param [string $separador_milhar='.'] O separador de milhares 
* @return string 
*/ 
my_number_format($number,$decimais=2,$separador_decimal=",",$separador_milhar="."){ 
// Número vazio? 
if(trim($number)=="") return $number; 
// se for um double precisamos garantir que não será covertido em 
// notação científica e que valores terminados em .90 tenha o zero removido 
if(is_float($number) || is_double($number)){ 
$number = sprintf("%.{$decimais}f",$number); 
} 
// Convertendo para uma string numérica 
$number = preg_replace('#\D#','',$number); 

// separando a parte decimal 
$decimal=''; 
if($decimais>0){ 
$number = sprintf("%.{$decimais}f",($number / pow(10,$decimais))); 
if(preg_match("#^(\d+)\D(\d{{$decimais}})$#",$number,$matches)){ 
$decimal=$separador_decimal . $matches[2]; 
$number=$matches[1]; 
} 
} 
// formatando a parte inteira 
if($separador_milhar!=''){ 
$number = implode($separador_milhar,array_reverse(array_map('strrev',str_split(strrev($number),3)))); 
} 
return $number . $decimal; 
}