allanlb 0 Denunciar post Postado Setembro 5, 2009 Boa Noite Galera! Estou com um probleminha aqui pra totalizar um carrinho de compras. Sou leigo e não acho o erro de jeito nenhum. A soma de dois produtos vamos supor 39,90 + 38,40, não soma as casas depois da vírgula, apenas o número inteiro. Se puderem me ajudar eu agradeço. Obrigado. <?php echo 'carrinho de: '.$_SESSION[codigo].' '.$_SESSION[cliente]; ?> <table border="1" align="center" bordercolor="#FFFFFF" cellpadding="0" cellspacing="0" bgcolor="#E9F0F5"> <tr> <th class="cabecalhopedido" bgcolor="#A9D3D3" colspan="2" > Produto </th> <th class="cabecalhopedido" bgcolor="#A9D3D3" > Quantidade </th> <th class="cabecalhopedido" bgcolor="#A9D3D3"> Preço unitário </th> <th class="cabecalhopedido" bgcolor="#A9D3D3"> Subtotal </th> <th class="cabecalhopedido" bgcolor="#A9D3D3"> Ação </th> </tr> </thead> <form action="?pag=carrinho&acao=up" method="post"> <tfoot> <td colspan="6" align="center"><a href="?pag=principal&possuicarro=ok"><img src="imgs/comprando.jpg" width="287" height="40" border="0" /></a><input type="image" name="imageField" src="imgs/atualizar.jpg" /></td> <tr> <td colspan="6" align="center" class="linkconfirmapedido"><a href="?pag=fecharpedido&verpedido=ok" class="menu">Ver meu pedido</a></td> </tr> </tfoot> <tbody> <?php $cor="#CDDDE9"; foreach ( $_SESSION['carrinho'] as $id => $qtd){ $sql = "select * from tbl_produtos where cod=$id"; $qr = mysql_query($sql) or die (mysql_error()); $ln = mysql_fetch_assoc($qr); $nome = $ln['nome']; $preco = number_format($ln['preco'], 2, ',', '.'); $sub = number_format($ln['preco']*$qtd, 2, ',', '.'); $total += $sub;?> <?php echo '<tr bgcolor="'.$cor.'">';?> <td bgcolor="E9F0F5" align="center"> <img src="<?php echo 'arq_imagem/'.$ln[img_princ];?>" border='0' width='45' height='45' /> </td> <?php echo '<td class="produtocarrinho"align="center"> '.$nome.' </td> <td align="center"> <input class="inputs" type="text" size="3" name="prod['.$id.']" value="'.$qtd.'"/> </td> <td class="precoproduto"align="center"> R$ '.$preco.' </td> <td class="subtotalcarrinho"align="center"> R$ '.$sub.' </td> <td align="center"> <a href="?pag=carrinho&acao=del&id='.$id.'" class="linkdel"> Remover </a> </td> </tr>'; if ($cor == "#CDDDE9") //aqui faz o teste se a cor atual é branca { $cor = "#BBD1E1"; // se for entao ele coloca a proxima cinza } else { $cor = "#CDDDE9"; //se a atual fo cinza ele faz ela volvar a ser branca } } $total2=number_format($total, 2, ',', '.');?> <tr> <td colspan="4" class="total">Total</td> <td class="total" bgcolor="E9F0F5" colspan="2" align="center"><?php echo 'R$ '.$total2;?></td> </tbody> </table> Obs: a linha <td class="subtotalcarrinho"align="center"> R$ '.$sub.' </td> mostra e calcula o subtotal com casas decimais corretamente, mas o total não funciona. Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Setembro 5, 2009 Você tá somando numero já formatado ($sub)... Precisa somar com o numero ainda não formatado (usando ponto na casa decimal) Compartilhar este post Link para o post Compartilhar em outros sites
RMARLLEY 0 Denunciar post Postado Setembro 5, 2009 Como a informação está vindo do banco, caso esteja vindo com (,) você deve ter o numero com (.) nas casas decimais. Sempre calcule tudo e depois você converte para o formato que desejar. :) Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Setembro 5, 2009 Você tá somando numero já formatado ($sub)... Precisa somar com o numero ainda não formatado (usando ponto na casa decimal) Apenas ilustrando: Está assim //... $preco = number_format($ln['preco'], 2, ',', '.'); $sub = number_format($ln['preco']*$qtd, 2, ',', '.'); $total += $sub; //.. Deveria estar assim: $preco = number_format($ln['preco'], 2, ',', '.'); $sub = number_format($ln['preco']*$qtd, 2, ',', '.'); $total += $ln['preco']*$qtd; Compartilhar este post Link para o post Compartilhar em outros sites
allanlb 0 Denunciar post Postado Setembro 5, 2009 Você tá somando numero já formatado ($sub)... Precisa somar com o numero ainda não formatado (usando ponto na casa decimal) Apenas ilustrando: Está assim //... $preco = number_format($ln['preco'], 2, ',', '.'); $sub = number_format($ln['preco']*$qtd, 2, ',', '.'); $total += $sub; //.. Deveria estar assim: $preco = number_format($ln['preco'], 2, ',', '.'); $sub = number_format($ln['preco']*$qtd, 2, ',', '.'); $total += $ln['preco']*$qtd; Fiz a alteração no código como recomendado : $preco = number_format($ln['preco'], 2, ',', '.'); $sub = number_format($ln['preco']*$qtd, 2, ',', '.'); $total += $ln['preco']*$qtd; $total1=number_format($total, 2,',','.'); ?> <?php echo '<tr bgcolor="'.$cor.'">';?> <td bgcolor="E9F0F5" align="center"> <img src="<?php echo 'arq_imagem/'.$ln[img_princ];?>" border='0' width='45' height='45' /> </td> <?php echo '<td class="produtocarrinho"align="center"> '.$nome.' </td> <td align="center"> <input class="inputs" type="text" size="3" name="prod['.$id.']" value="'.$qtd.'"/> </td> <td class="precoproduto"align="center"> R$ '.$preco.' </td> <td class="subtotalcarrinho"align="center"> R$ '.$sub.' </td> <td align="center"> <a href="?pag=carrinho&acao=del&id='.$id.'" class="linkdel"> Remover </a> </td> </tr>'; if ($cor == "#CDDDE9") //aqui faz o teste se a cor atual é branca { $cor = "#BBD1E1"; // se for entao ele coloca a proxima cinza } else { $cor = "#CDDDE9"; //se a atual fo cinza ele faz ela volvar a ser branca } } ?> <tr> <td colspan="4" class="total">Total</td> <td class="total" bgcolor="E9F0F5" colspan="2" align="center"><?php echo 'R$ '.$total1;?></td> </tbody> </table> </form> Obs: os preços estão vindo do banco assim: 2.55 e 78.60. Fiz um teste: quantidade:2 preço unitário:2,55 subtotal:5,10 quantidade:2 preço unitário:78,60 subtotal:157,20 Até aí tudo certo, mas o total ele mostra: 242,30; Ele tá somando errado, muito estranho. Se puderem ajudar agradeço. Obrigado a todos pela força até agora. Compartilhar este post Link para o post Compartilhar em outros sites
allanlb 0 Denunciar post Postado Setembro 7, 2009 Resolvido, fiz o recomendado, e umas alterações. Tudo certo! Compartilhar este post Link para o post Compartilhar em outros sites