Ir para conteúdo

POWERED BY:

Arquivado

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

Adson aquino

[Resolvido] Somar em php

Recommended Posts

Olá galera, tenho um relátorio de gastos e está dando um problema na soma, se os valores a serem somados forem exemplo: 10.00 + 165.00 até aí tudo bem soma beleza, mais se for acima de mil da pal ex: 165.00 + 3.980.00, como posso fazer para consertar isso. segue meu código abaixo.

 

$soma = 0;
while($dados=pg_fetch_array($exec)) {
$valor = str_replace(',', '.', $dados['c16']);
$soma += number_format($valor, 2, '.', '');
?>

Espero alguma ajuda, obg.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais a minha mascara no form coloca o valor assim 3.980.00, tenho que dar um jeito de resolver na soma mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mario é o seguinte tenho uma mascara no formulario no campo valor, quando vou digitando ele vai colocando os pontos certo... se eu tirar essa mascara aí ferra, você sabe como é os usuários né, vou ver se posso fazer algo na mascara.

 

Beraldo no meu banco de dados o valor esta assim 3.980.00 posso até tirar essas ganbiarras mais vai continuar com o mesmo erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então o campo não é numérico? isso gera problemas como o seu

 

 

a gambiarra mais adequada seria, depois de se certificar de que existem dois números após o último ponto, retirar todos os pontos e inserir um ponto antes dos dois último dígitos. Pode fazer isso com manipulação de strings ou tratando tudo como número. Você usa $num%100 para pegar os dois últimos dígiitos depois divide o número por 100, para pegar os demais, da parte inteiro. Depois é spó juntar, com o ponto como separador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso que o Beraldo Falou seria mesmo o mais adequado para a gambiarra.

 

Mas na minha opinião, eu salvaria o valor no banco no formato numérico mesmo, tirando a regra de mascaramento do form, colocando um ponto apenas ao invés de dois campos.

 

E também colocando o tipo de campo no banco para numeric.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tira os pontos

Soma

Formata de novo

 

   $soma = 0;
   while($dados = pg_fetch_array($exec)) 
   {
      $valor = str_replace(',', '', $dados['c16']);
      $soma  = $soma + $valor; 
   }
   echo number_format($soma, 2, '.', ',');
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alterei no banco como vcs falaram, meu banco é postgres alterei primeiro para money e não deu certo e depois para numeric tb sem sucesso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você altera pra numeric, com precisão de 2.

 

Ao enviar a informação para o banco, você deve enviar nesse formato:

$numero=3250.35;
Se enviar no formato que você disse estar formatando, não vai rolar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dee coloquei como você postou, ele não fez a soma dos resultado fez foi juntar assim 1.000 2.500.00, entendeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites


$soma = 0;

while($dados = pg_fetch_array($exec))

{

$valor = str_replace(',', '', $dados['c16']);

$soma = floatval($soma + $valor);

}

echo number_format($soma, 2, '.', ',');

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alterei no banco como vcs falaram, meu banco é postgres alterei primeiro para money e não deu certo e depois para numeric tb sem sucesso.

 

não basta mudar o tipo de campo. Você tem que criar outro campo do tipoo numérico e cadatsrar os dados nele. Pode afzer isso ocm uma SQL mesmo, apenas transferindo de um campo para outro.

 

Isso é necessário pois, como o número estava num camp do tipo string, ele pode ser truncado ou até zerado ao ser convertido em numérico pelo SGBD.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu deixaria o formato do campo no banco de dados como decimal(10,2) com duas casas decimais.

 

No campo no form eu deixaria uma mascara no formato brasileiro no valor (3.000,12), quando for gravar no banco de dados faz uma função que some com o ponto e depois substitui a vírgula por ponto ai grava certo na base. Quando for realizar a conta e valor do banco de dados vem correto...

 

Depois você faz outra função colocando o formato brasileiro para mostra...

 

Acho que é isso

 

Abs

Valter

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu galera do imasters, a dica do Dee resolvel o meu problema, obg a todos.

 

Sei que resolveu o problema, e provavelmente não quer voltar a ele. Mas tenha em mente uma coisa: você não usou a melhor solução. O ideal seria manter os dados em campos concernetes à sua natureza. Dados numéricos devem ser armazenados em campos numéricos. Isso evita essas gambiarras.

 

Se um dia for usar o BD com outra linguagem/tecnologia, terá de fazer uma nova gambiarra para somar. Se os dados estivessem em campos adequados, essa soma poderia ser feita numa consulta SQL, apenas chamando uma função que geraria um campo a mais no resultado.

 

Um banco de dados bem modelado economiza muitas linhas de código e facilita bastante a programação. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

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.