Ir para conteúdo

POWERED BY:

Arquivado

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

Desnickadu

[Resolvido] number_format() comendo decimais

Recommended Posts

eae galera, tudo certo ?

 

tenho um probleminha aqui que acho ser causado pelo number_format()

 

tenho essa funçãozinha pra mudar o formato dos numeros de brasileiro pro americano:

function moeda( $campo )
	{
		$campo = number_format($campo, 2, '.', ' ');
		return $campo;
	}

 

no SQL a coluna onde esses nueros são gravados esta configurada como 'decimal(10,2)'.

 

 

o problema é:

se entra 15,00 sai 15.00

se entra 15,15 sai 15.00

se entra 0,15 sai 0.00

se entra 15.15 sai 15.15

se entra 15 sai 15.00

 

então, creio eu que ele esta desprezando todos os numeros depois da virgula.

estou usando o number_format() de forma errada ?

seria melhor utilizar o money_format() ? existe alguma restrição nesse pelo fato do meu server ser windows, ou basta configurar certinho qeu não da problemas ?

a formatação do SQL pode estar interferindo nisso ?

 

vlw pela força o/

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Desnickadu,

 

number_format é uma função de formatação numérica e recebe um número como parâmetro. Para o PHP, 15,15 é apenas um string. Você obteve alguns resultados pois está utilizando o parâmetro destinado a $dec_point e $thousands_sep, respectivamente o ponto decimal desejado e o separador de milhar. Quanto você envia "15,15" ao number_format, por receber um número é o mesmo que user um floatval("15,15"), que retorna 15. O PHP formata esse 15 e retorna "15.00", pois indicaste como ponto decimal um ".".

 

Resumindo, está utilizando esta função para o propósito errado.

Você pode utilizar algo assim:

/** 
* Converte número do formato brasileiro para americano
* @param string $num
*/
function bra2eua($num)
{
$num = str_replace(".", "", "$num");
$num = str_replace(",", ".", "$num");
return $num;
}

/** 
* Converte número do formato americano para brasileiro
* @param string $num
*/
function eua2bra($num)
{
       //pode utilizar number_format aqui...
$num = str_replace(",", "", "$num");
$num = str_replace(".", ",", "$num");
return $num;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

uso decimal porque o float não é preciso

 

em alguns casos ele pode modificar o valor que eu colocar no banco

 

como por exemplo, depois de calcular um preço de venda [custo + impostos] o valor gravado pelo float vai ser arredondado, enquanto o decimal não vai arredondar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use como quiser, mas saiba que number_format espera um número como primeiro parâmetro, e se não for um número vai rolar um floatval(). 15,15 não é número, à propósito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sabia que a virgula fazia o float virar string '-'

 

resolvi adicionando um str_replace na minha função

 

function moeda( $campo )
	{
		$campo = str_replace(",", ".", "$campo");
		$campo = number_format($campo, 2, '.', ' ');
		return $campo;
	}

 

se o problema com o number_format era porque a virgula fazia a entrada deixar de ser um number, colocando um ponto no lugar ele "volta" a ser number. dessa forma com o number_format consigo deixar minhas casas decimais como devem ser.

 

 

 

sobre o decimal Vs float, segue o trecho retirado do manual SQL:

 

MySQL supports all of the standard SQL numeric data types. These types include the exact numeric data types (INTEGER, SMALLINT, DECIMAL, and NUMERIC), as well as the approximate numeric data types (FLOAT, REAL, and DOUBLE PRECISION).

 

vlw galera !

 

[]'s

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.