Ir para conteúdo

POWERED BY:

Arquivado

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

Cristian Augusto

Formatação de valores PHP

Recommended Posts

Pessoal, tudo certo?

Bom, vou precisar da ajuda de vocês.

Tentei compreender a função number_format, porém não deu muito certo.

O problema é o seguinte:

 

No banco de dados, dois valores diferentes estão cadastrados assim:

valor1: 985.600000

valor2: 1.036000

 

Na forma final, deve ficar assim:

valor1: 985,60

valor2: 1.036,20

 

Porém está resultando assim:

valor1: 985,60

valor2: 1,04

 

Estou utilizando esta função: number_format($preco,2,",",".")

 

É meio complicado de se entender essa lógica em que os valores estão no banco de dados, porém é um script que estou fazendo com dados coletados de uma db do ecommerce PrestaShop.

Alguém saberia me auxiliar na resolução deste problema?

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função está correta, oq está incorreto é o valor do banco de dados

 

No banco deveria estar 1036.20 para resultar no esperado

 

Exato, porém não posso alterar a função que grava no banco de dados pois vem do ecommerce, então me resta apenas fazer alguma "gambiarra" na hora de formatar o valor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, acho que o erro ta nessa coluna onde ficam os valores. Tenta alterar essa coluna para algo do tipo "decimal(8,2)", que ficaria, por exemplo, 100000,00. Já que esses dois apos a virgula só seria para os centavinhos.

 

E após escrever uma função em php para tratar isso. Vou tentar uma aki, e mais tarde posto o codigo :D

 

beleza?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, acho que o erro ta nessa coluna onde ficam os valores. Tenta alterar essa coluna para algo do tipo "decimal(8,2)", que ficaria, por exemplo, 100000,00. Já que esses dois apos a virgula só seria para os centavinhos.

 

E após escrever uma função em php para tratar isso. Vou tentar uma aki, e mais tarde posto o codigo :D/>

 

beleza?!

 

Mas será que não irá influenciar no mal funcionamento do ecommerce?

O Prestashop consegue formatar esses valores sem problema, porém não posso utilizar as mesmas funções pois é em smarty

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que não cara, já que a alteração será feita na tabela(coluna preço), no banco de dados. Caso dê problema só voltar ao que era antes. Que pelo você me mostrou a formatação do campo de dados está dando algo em torno de 6 casas decimais.

 

Tipo, não precisa mexer no prestashop e sim alterar o tipo de dado no banco de dados, especificamente na tabela. De cara possso afirmar que está tendo 6 casas decimais.

 

bem, qualquer coisa esta a query para alteração: alter table TBL_A_SER_ALTERADA change CMPO_ASER_TROCADO CMPO_ASER_TROCADO decimal(10,2)

 

sim repetir o nome do campo a ser modificado.

 

Ps; antes faça um backup do banco, se der uma zebra maior você está precavido :D

 

espero ter ajudado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amiguinho, sou eu de volta. Bem se você usar o campo "decimal(10,2)" em seu banco de dados, e na sua aplicação em php, na saída de valor a função number_format($var_valor, 2), vai funcionar sem problemas :D

 

 

mas essa framework(pretashop), retorna algum valor, certo?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amiguinho, sou eu de volta. Bem se você usar o campo "decimal(10,2)" em seu banco de dados, e na sua aplicação em php, na saída de valor a função number_format($var_valor, 2), vai funcionar sem problemas biggrin.gif

 

 

mas essa framework(pretashop), retorna algum valor, certo?!

 

Amigo, tudo certo?

Alterei a linha para decimal(10,2) porém não resolveu.. Ficou tudo igual

Ah, desculpe pela demora na resposta

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, não tem nada errado com a funcao number_format que vc usou , ela esta correta, o que está errado é o valor inserido no banco de dados

repare que 1.036000 é diferente de 1036.000

ou seja, foi cadastrado realmente 1,036 centavos

corrija o valor no banco de dados e estará tudo certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, não tem nada errado com a funcao number_format que vc usou , ela esta correta, o que está errado é o valor inserido no banco de dados

repare que 1.036000 é diferente de 1036.000

ou seja, foi cadastrado realmente 1,036 centavos

corrija o valor no banco de dados e estará tudo certo

 

João, tudo certo?

O problema é que estes valores são atualizados pelo PrestaShop (ecommerce)

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, mas eles estão errados, altere direto no banco de dados se for o caso.

 

Mas aí eu teria que atualizar toda vez em que o cliente realizar alguma atualização nos valores.

Preciso de algo que resolva definitivamente

Compartilhar este post


Link para o post
Compartilhar em outros sites

se o valor correto era para ser 1036.20 e esta 1.036000

existem 2 possibilidades para ter gravado errado,

1) o usuario inseriu o valor errado (mais provavel)

2) o PrestaShop gravou errado , neste caso , vc vai precisar revisar o codigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se o valor correto era para ser 1036.20 e esta 1.036000

existem 2 possibilidades para ter gravado errado,

1) o usuario inseriu o valor errado (mais provavel)

2) o PrestaShop gravou errado , neste caso , vc vai precisar revisar o codigo.

 

Os valores inseridos na hora de cadastrar estão corretos, tanto que o prestashop corrige-os caso estejam errados. Novamente, o prestashop está salvando os dados certos sim.

O que ocorre é o seguinte:

O prestashop tem uma função que exibe os valores de forma correta, com base na configuração de cada moeda (no caso Real, 0.000,00). O problema é que esta função está em Smarty, e preciso executá-la em PHP, o que é praticamente impossível.

Estou tentando simular esta função em PHP, porém não está dando certo..

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que esta função está em Smarty, e preciso executá-la em PHP, o que é praticamente impossível.

Falou bobagem. Smarty é escrito em PHP. Possível é. E sugiro que procure descobrir como.

 

Outra coisa

No banco de dados, dois valores diferentes estão cadastrados assim:

valor1: 985.600000

valor2: 1.036000

 

Na forma final, deve ficar assim:

valor1: 985,60

valor2: 1.036,20

Veja que os valores formatados não tem relação entre si. No valor1, o ponto significa separador de centavos

985.6...... -> 985,60

 

No valor dois, além do ponto significar separador de milhar, apareceram 20 centavos por mágica, de lugar nenhum.

1.036... -> 1036,20

 

A primeira coisa que você tem que decidir é se esse ponto significa separador de milhar ou ponto flutuante (centavos)

 

Outra coisa, 98560000 é muito maior que 1036000. Qual a lógica no segundo número virar uma cifra maior que o primeiro??

 

Enfim, não há consistência entre as entradas e saídas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Falou bobagem. Smarty é escrito em PHP. Possível é. E sugiro que procure descobrir como.

 

Outra coisa

 

Veja que os valores formatados não tem relação entre si. No valor1, o ponto significa separador de centavos

985.6...... -> 985,60

 

No valor dois, além do ponto significar separador de milhar, apareceram 20 centavos por mágica, de lugar nenhum.

1.036... -> 1036,20

 

A primeira coisa que você tem que decidir é se esse ponto significa separador de milhar ou ponto flutuante (centavos)

 

Outra coisa, 98560000 é muito maior que 1036000. Qual a lógica no segundo número virar uma cifra maior que o primeiro??

 

Enfim, não há consistência entre as entradas e saídas.

 

Exato, porém acredito que o prestashop formate os valores com base nas configurações das moedas (painel de controle).

Em relação a executar funções Smarty em um script PHP, já tentei e resultou em erro. Procurei sobre no Google porém não achei nada concreto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta. Primeira pergunta:

 

como 1.036000 vira 1036,20???

 

Qual é o critério?

 

Perdão, no banco de dados está assim: 1036.200000

A imagem abaixo mostra as configurações da moeda, no painel administrativo. Alguma ideia?

presta.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perdão, no banco de dados está assim: 1036.200000

Ficou mais fácil, veja:

valor1:  985.600000
valor2: 1036.200000

Os números já estão em notação de ponto flutuante com precisão de 6 casas. Basta fazer a formatação:

 

$valor_formatado = number_format(floatval($valor_do_banco), 2, ',', '.');

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Ficou mais fácil, veja:

 

valor1:  985.600000
valor2: 1036.200000

Os números já estão em notação de ponto flutuante com precisão de 6 casas. Basta fazer a formatação:

 

$valor_formatado = number_format(floatval($valor_do_banco), 2, ',', '.');

 

 

Peço mil desculpas pela demora na resposta, mas resolveu meu problema!

Agradeço, mesmo!

Um bom ano e bons trabalhos para você :D

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.