Ir para conteúdo

POWERED BY:

Arquivado

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

allanlb

[Resolvido] Totalidade não soma casas decimais

Recommended Posts

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

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

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

 

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

Resolvido, fiz o recomendado, e umas alterações.

Tudo certo!

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.