number_format

912 views
Skip to first unread message

Leandro C. Lopez

unread,
Dec 16, 2009, 6:43:00 AM12/16/09
to phpav...@googlegroups.com
Amigos !!!
 
Atualizei meu PHP pra versao 5.3.1, antes usava a 5.2.11, e desde entao onde tenho chamadas a função number_format me aparece o erro:
 
"Warning: number_format() expects parameter 1 to be double, object given in"
 
Detalhe, o numero a ser formatado eh o retorno de uma leitura com simplexml ficando assim:
 
number_format($pd->prod->vProd, 0, ",", ".")
 
Para que nao apareça o erro coloquei desta forma:
 
number_format($pd->prod->vProd + 0, 0, ",", ".")
 
Entretanto, se o valor contiver decimais estas são ignoradas ficando por exemplo 1.250,00 no lugar de aparecer 1.250,50.
 
Alguem teria uma solução melhor pra isso não ocorrer ???
 
Att.: Leandro C. Lopez
 

Giancarlo Raduan

unread,
Dec 16, 2009, 7:05:25 AM12/16/09
to phpav...@googlegroups.com
string number_format ( float $number [, int $decimals ] )
string number_format ( float $number , int $decimals , string $dec_point , string $thousands_sep )

Vendo a especificação do www.php.net/number_format, de cara ja se ve o erro.
Para utilizar essa funcao, o valor tem que ser retornado no padrão inteiro, ou seja,vejo que voce especifica 0 na segunda opcao, ou seja, voce esta pedindo para converter o valor eliminando os decimais, mesmo que especifique a virgula para separador decimal e o ponto para separador de milhares.

Entenda que, para obter o resultado que pediu, tem que ficar  algo do tipo

$pd->prod->vProd = 1250.50;

number_format($pd->prod->vProd, 2, ",", ".")

retornaria 1.250,00

assim como:

$pd->prod->vProd = 3100.80;

number_format($pd->prod->vProd, 3, ",", ".")

retornaria 3.100,800


Outro detalhe, essa função exije que tenha 2 opcoes, no caso ($valor, decimais) porem, se especificiar o separador de decimal, obrigatoriamente tem que especificar o separador de milhares.

Verifique se a variavel que voce esta querendo converter o valor não esta nula, quando voce coloca +0 voce faz que o resultado não seja nulo, e a funcao trabalha normalmente.
Serve como um aviso, pois voce deve estar usando o SQL erroneamente, inserindo valores, sem ser com o tipo de coluna especifico, que no caso seria o DECIMAL por exemplo DECIMAL(8,2) que armazena até 999999.99 (oito caracteres).


E para finalizar, to rodando o mesmo PHP, versão lancada a poucos dias, e roda normalmente sem problemas.

Abracao, qualquer coisa, pode me escrever diretamente,

att,
Giancarlo


2009/12/16 Leandro C. Lopez <leandro....@gmail.com>

--
Você recebeu esta mensagem porque está inscrito no Google Groups "PHP Avançado".
Para postar nesse grupo, envie e-mail phpav...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para phpavancado...@googlegroups.com
Para mais opções, visitem este grupo em http://groups.google.com.br/group/phpavancado
Tudo sobre php: http://www.phpavancado.net/
Documentação PHP: www.php.net

Leandro C. Lopez

unread,
Dec 16, 2009, 7:54:55 AM12/16/09
to phpav...@googlegroups.com
Giancarlo !!!
 
Valeu pela resposta...
 
Detalhe, cometi um erro de digitação no e-mail, onde era pra ser number_format($pd->prod->vProd, 0, ",", ".") tem que ser number_format($pd->prod->vProd, 2, ",", ".") ... com o 2 no lugar do zero mesmo...
 
Não entendi pq no teu exemplo:
 
$pd->prod->vProd = 1250.50;

number_format($pd->prod->vProd, 2, ",", ".")

retornaria 1.250,00 ??? pq ele retirou a parte decimal ???
 
Outra coisa, testei no meu sistema aqui as seguintes situações:
echo($pd->prod->vProd);
Retorna: 1250.50 ...

echo(($pd->prod->vProd + 0));
Retorna: 1250
 
Ou seja, somando zero ao numero com decimais .50 o PHP está retornando um valor inteiro... pq isso ???
 
Mais uma coisa, o valor em $pd->prod->vProd não vem do resultado de um SQL e sim da leitura de um arquivo XML via as funções do simplexml do PHP.

 
2009/12/16 Giancarlo Raduan <gra...@gmail.com>

Gilmar de Paula

unread,
Dec 16, 2009, 8:40:57 AM12/16/09
to PHP Avançado
Bom dia,

Acho q o problema é no campo enviado... vc esta enviando um "OBJETO" e
nao um campo "DOUBLE".
Qual o conteudo de "$pd->prod->vProd" ?

Abraços,
Gilmar.

On Dec 16, 9:43 am, "Leandro C. Lopez" <leandro.casto...@gmail.com>
wrote:
> Amigos !!!
>
> Atualizei meu PHP pra versao 5.3.1, antes usava a 5.2.11, e desde entao onde
> tenho chamadas a função number_format me aparece o erro:
>
> *"Warning*: number_format() expects parameter 1 to be double, object given

Leandro C. Lopez

unread,
Dec 16, 2009, 8:49:10 AM12/16/09
to phpav...@googlegroups.com
Leio o arquivo XML desta forma:
 
$arquivo = "./arquivos/nfe_xxxx.xml";
$xml = simplexml_load_file($arquivo);
 
foreach ($xml->NFe->infNFe->det as $pd) {
   number_format($pd->prod->vProd, 2, ",", ".");
}

Sendo que no arquivo XML vProd eh uma tag: <vProd>1250.50</vProd>

 
2009/12/16 Gilmar de Paula <gilmar...@gmail.com>

Leandro C. Lopez

unread,
Dec 16, 2009, 9:07:22 AM12/16/09
to phpav...@googlegroups.com
Consegui, fiz assim:
 
number_format((double) $pd->prod->vProd, 2, ",", ".");
Vlw pela ajuda pessoal... ajudou a ativar o neurunico !!!  ;o)

 
2009/12/16 Leandro C. Lopez <leandro....@gmail.com>
Leio o arquivo XML desta forma:

Daniel

unread,
Dec 16, 2009, 8:30:48 AM12/16/09
to PHP Avançado
Apesar de ser uma gambiarra, tente fazer
number_format($pd->prod->vProd + 0.0, 0, ",", ".")

On 16 dez, 09:43, "Leandro C. Lopez" <leandro.casto...@gmail.com>
wrote:
> Amigos !!!
>
> Atualizei meu PHP pra versao 5.3.1, antes usava a 5.2.11, e desde entao onde
> tenho chamadas a função number_format me aparece o erro:
>
> *"Warning*: number_format() expects parameter 1 to be double, object given

Leandro C. Lopez

unread,
Dec 16, 2009, 10:29:45 AM12/16/09
to phpav...@googlegroups.com
Tb nao dah certo... mas da forma que achei funcionou:
 
number_format((double) $pd->prod->vProd, 2, ",", ".");

2009/12/16 Daniel <danie...@gmail.com>

deolindo soares

unread,
Dec 16, 2009, 11:03:38 AM12/16/09
to phpav...@googlegroups.com
Ae rapaziada..tudo bem com vcs...!!
 
Bem eu sempre uso funções criadas por mim..
criem uma função em php que formate seus numero
fica muito melhor, assim vcs não vão ficar dependendo de funções do php...
 
 
 
Se precisarem de ajuda pra criar tais funções estou a disposição..
 
t + Deo.
 
 


 
2009/12/16 Leandro C. Lopez <leandro....@gmail.com>
Tb nao dah certo... mas da forma que achei funcionou:



--
Solitário na multidão
Reply all
Reply to author
Forward
0 new messages