Ir para conteúdo

POWERED BY:

Arquivado

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

marcosfj1

Somar os dados que estao dentro da variavel

Recommended Posts

Galera to com um problema, tenho que inserir numa variavel uns dados, no caso é uma conta q quero fazer, segue o codigo:

 

while ($cp = mysql_fetch_array($req)) {
$sql50 = mysql_query("SELECT * 
		FROM percentual_consumidor_final 
		WHERE id_aumento IS NOT NULL 
		ORDER BY id_aumento DESC LIMIT 1000");
			while($cp50 = mysql_fetch_array($sql50)){
			$aumento_porcetagem = $cp50['vl_aumento'];

			if($cp50['id_produto_categoria'] == $cp['id_produto_categoria']){
				$cp['vl_atacado'] = (ceil($cp['vl_atacado'] + ($cp['vl_atacado'] * ($aumento_porcetagem/100)))) - 0.10;
					$vl_sub_total = $cp['vl_atacado'] * $cp['qt_produto'];
					echo $vl_sub_total.'<br>';
					echo $cp['qt_produto'].'<br>';
							}
					}

				}

 

Bom o que eu quero com isso é se o produto pertencer a determinada categoria ele recebe um aumento em porcetnagem, - 10 centavos...isso esta dando certo

Tanto que podem ver no codigo eu coloquei alguns ECHOS para ver se estava sendo jogado na variavel os valores corretos e estao. Na minha compra tenho 2 celuares e 1 mouse com os respectivos preços 99,90 e 29,90.

 

Bom até aqui beleza ao dar o echo eu vejo la estes valores multiplicados pela quantidade o q esta certo, porem o $vl_sub_total fica mostrando assim : 199,80 (pula um linha <br> 29,90, quando na verdade deveria ser 229,70

 

Alguem pode me ajudar a somar estes valores dentro da variavel e assim conseguir o valor certo?

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça a soma no formato americano

 

com . (ponto), como separador de centavos.

Roda um 'replace' mesmo para trocar as virgulas por ponto, e então faça a conta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça a soma no formato americano

 

com . (ponto), como separador de centavos.

Roda um 'replace' mesmo para trocar as virgulas por ponto, e então faça a conta.

 

 

Cara as contas ja estao sendo feita corretamentes, tanto q no echo eu mostro os valores certo, apenas nao consigo fazer ele somar os valores que estao dentro da variavel $vl_sub_total, pois nela é q contem os dois valores

Compartilhar este post


Link para o post
Compartilhar em outros sites
use o Responder Azul: respondery.png

ou a 'Resposta Rápida'.

Então não entendi amigo.

 

faça:

var_dump( $vl_sub_total );

e poste o resultado

Compartilhar este post


Link para o post
Compartilhar em outros sites

199,8

2

float(199,8) 29,9

1

float(29,9)

 

Apareceu isso....ou seja ele faz a conta certa, mas ele nao soma os valores q estao dentro da variavel que sao 199,8 + 29,9

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara, se tá com virgula ali, não tem como o script fazer a soma corretamente.

 

troque a virgula por ponto, e então faça a conta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara, se tá com virgula ali, não tem como o script fazer a soma corretamente.

 

troque a virgula por ponto, e então faça a conta.

 

Cara mas entao veja meu pensamento se esta errado...em:

$cp['vl_atacado'] = (ceil($cp['vl_atacado'] + ($cp['vl_atacado'] * ($aumento_porcetagem/100)))) - 0.10;

 

Eu estou fazendo uma soma, uma multiplicação, uma divisao e uma subtração....todas com o uso da virgula, e nao esta dando problema nenhum, pois o $cp['esta recebendo o resultado corretamente']

 

Entao nao pode ser um problema de virgula isso, senao daria nesse caso tbm que a conta é mto mais complexa certo?

 

Valeu ai a ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo marcosfj1 preste atenção ao que o amigo William esta lhe dizendo.

Você usa funções em seu código que se quer sabe para que elas servem.

Estude um pouco mais sobre lógica de programação e PHP.

 

A função ceil arredonda as frações para cima transformando o resultado em número inteiro.

Você tem a impressão de que da certo mas se tiver virgula o valor da soma estará errado.

 

Basta fazer simples testes:

 

Teste 1

 

$x = '10,25';
$y = '20,14';
echo ceil($x+$y);

Teste 2

 

$x = '10.25';
$y = '20.14';
echo ceil($x+$y);

Portanto padronize os números com vírgula para ponto.

Assim você vai conseguir fazer seu cálculo corretamente pois os valores serão do tipo float.

 

A dica do William está correta.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ta vou tentar aqui e ver o q vira depois eu posto o resultado

 

Bom seguindo coloquei estes teste q você me passou para ver a diferença entre eles resultado

Teste 1 = 3030 COM VIRGULA

 

Teste 2 = 3131 COM PONTO

 

Conta feita na calculadora 30,39

 

Entao agora nao entendi nada hahaha

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que tal estudar a função ceil() que por um acaso está no código de teste, no seu código,

eu até já expliquei oque ela faz e pra variar já pedi pra você estudar melhor? <_<

 

http://www.php.net/ceil

 

P.S.

Não existe função ceil na calculadora. <_<

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que tal estudar a função ceil() que por um acaso está no código de teste, no seu código,

eu até já expliquei oque ela faz e pra variar já pedi pra você estudar melhor? <_<

 

http://www.php.net/ceil

 

Entao amigo eu sei o q ela faz ela arredonda os valores para cima certo, de acordo com o q eu li na internet e o q você mesmo falou. Entao seguindo o que ela faz em uma conta de 10.25 + 20.14 = 30.39

Se ela arredonda para cima o numero mais proximo seria 31 certo?

Por isso q nao entendi?

 

Mas voltando a questao principal beleza dá diferença entre somar com PONTO e somar com VIRGULA, porem a soma esta com o valor esperado em $cp['vl_atacado'], mas nao esta com o valor esperado em $vl_sub_total, detalhe a função ceil() é usada apenas em $cp['vl_atacado'] (da uma olhadinha no codigo q postei), o q poderia causar o erro nesta variavel e nao na outra.

 

Eu acredito q o problema seja q a variavel $cp['vl_atacado'] é um conjunto de numero, no caso q expliquei 199,8 + 29,9 entao é inserido na $vl_sub_total este mesmo conjunto e nao a soma dele...mas o meu problema é como somar este conjunto de numero, e nao se a conta esta certa ou errada...deveria aparecer apenas um numero qdo dou o echo $vl_sub_total, independente de estar certo ou errado o numero....mas esta aparecendo os dois

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

A questão não é aonde você esta usando ceil em seu código mais sim oque ceil faz.

Nos exemplos que passei ta bem fácil de entender não? Você usar esta função em $cp['vl_atacado']

faz apenas com que $cp['vl_atacado'] vire um numero inteiro maior ex: 2.6 será 3. Nada mais.

O restante do exemplo demonstra como fica errado o valor quando se soma com vírgula.

Nos testes que postei aqui pra mim apareceu 31 pra você não? :huh:

 

Veja se é isso que você quer:

 

$vl_sub_total += $cp['vl_atacado'] * $cp['qt_produto'];

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já usei este += mas tbm nao deu certo de somar...vou colocar o codigo todo para entender melhor, comentei ele ao maximo

 

 

// VERIFICA SE O CLIENTE ESTA LOGADO
		if ($_SESSION['cliente']['id_cliente']) {
		// BUSCA NA TABELA CLIENTE, O TIPO DO CLIENTE LOGADO
			$sql8 = mysql_query("SELECT * FROM cliente WHERE id_cliente = {$_SESSION['cliente']['id_cliente']}");
			$cp8 = mysql_fetch_array($sql8);
			// SE O TIPO FOR IGUAL A 1, IGUAL A CONSUMIDOR FINAL, todo CONSUMIDOR FINAL TEM AUMENTO NO PREÇO
				if($cp8['tipo'] == 1){ 
				// BUSCO NA TABELA CARRINHO INFORMAÇOES SOBRE OS PRODUTOS QUE ESTAO INSERIDOS NO CARRINHO
				$sql = "SELECT C.*, P.nome, P.vl_atacado, P.vl_varejo, P.codigo, PC.id_produto_categoria, C.qt_produto
					FROM carrinho C
					INNER JOIN produto P ON P.id_produto = C.id_produto
					INNER JOIN produto_categoria PC ON PC.id_produto_categoria = P.id_produto_categoria
					WHERE id_cliente = {$_SESSION['cliente']['id_cliente']} 
					AND P.st_ativo = 1
					AND PC.st_ativo = 1
					AND P.qt_produto > 0
					AND (P.st_indisponivel = 0 OR P.st_indisponivel IS NULL) ";
			$req = mysql_query($sql);
			//
			// FAÇO UM ARRAY PARA VERIFICAR todos OS DADOS ALEM DO PRIMEIRO
			while ($cp = mysql_fetch_array($req)) {
				// SELECIONO NA TABELA DE PERCENTUAL A % QUE SERÁ AUMENTADA NAQUELE PRODUTO
				$sql50 = mysql_query("SELECT * 
										FROM percentual_consumidor_final 
										WHERE id_aumento IS NOT NULL 
										ORDER BY id_aumento DESC LIMIT 1000");
					while($cp50 = mysql_fetch_array($sql50)){
					// SETO A PORCENTAGEM NA VARIAVEL
					$aumento_porcetagem = $cp50['vl_aumento'];
					//SE A CATEGORIA DE PERCENTUAL ESTIVER NA TABELA CARRINHO ENTAO ELE AUMENTA A PORCENTAGEM SOMENTE NAQUELE PRODUTO
							if($cp50['id_produto_categoria'] == $cp['id_produto_categoria']){
							// FAZ O CALCULO
								$cp['vl_atacado'] = ((ceil($cp['vl_atacado'] + ($cp['vl_atacado'] * ($aumento_porcetagem/100)))) - 0.10);

								// PARA CADA PRODUTO VERIFICO A QUANTIDADE DELE PARA FAZER A MULTIPLICAÇAO PELO VALOR ENCONTRADO ACIMA
								$vl_sub_total = $cp['vl_atacado']  * $cp['qt_produto'];

								//DOU UM ECHO PARA VER O QUE ESTA VARIAVEL ESTA RECENDO
								echo $vl_sub_total.'<br>';
								//echo $cp['vl_atacado'].'---<br>';
								//echo $cp['qt_produto'].'<br>';
								//var_dump( $vl_sub_total );
							} 

					}

				}	
			}




		}

 

Agora esclarecendo tudo isso esta funcionando pois no echo aparece la o peço dos produtos multiplicados pela porcentagem, como deve ser mesmo, no caso

Celular: 99,90 QTDE 2 = 199,80

Mouse: 29,90 QTDE = 29,90

 

Ou seja ele faz td q eu peço mas a variavel $vl_sub_total deveria ser a soma desses valores atraves de:

$vl_sub_total = $cp['vl_atacado']  * $cp['qt_produto'];

 

Mas nao é isso q ocorre, e no ECHO da mesma aparece

199,80

29,90

 

E nao a soma: 229,70

 

 

Bom nao tenho como esclarecer mais, porem ja tentei de tudo aqui, devo ta errando em algo no codigo talvez nesse whiles q tive q fazer, alguem pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você quer um valor total o mesmo tem que estar fora do loop.

Fiz um exemplo com array abaixo, mas pode ser feito com += também.

 

$arrValues = array();
while($cp50 = mysql_fetch_array($sql50)){
      // SETO A PORCENTAGEM NA VARIAVEL
      $aumento_porcetagem = $cp50['vl_aumento'];
      //SE A CATEGORIA DE PERCENTUAL ESTIVER NA TABELA CARRINHO ENTAO ELE AUMENTA A PORCENTAGEM SOMENTE NAQUELE PRODUTO
      if($cp50['id_produto_categoria'] == $cp['id_produto_categoria']){
         // FAZ O CALCULO
         $cp['vl_atacado'] = ((ceil($cp['vl_atacado'] + ($cp['vl_atacado'] * ($aumento_porcetagem/100)))) - 0.10);

         //PARA CADA PRODUTO VERIFICO A QUANTIDADE DELE PARA FAZER A MULTIPLICAÇAO PELO VALOR ENCONTRADO ACIMA
         $vl_sub_total = $cp['vl_atacado']  * $cp['qt_produto'];
         $arrValues[] = $vl_sub_total;

         //DOU UM ECHO PARA VER O QUE ESTA VARIAVEL ESTA RECENDO
         echo $vl_sub_total.'<br>';
         //echo $cp['vl_atacado'].'---<br>';
         //echo $cp['qt_produto'].'<br>';
         //var_dump( $vl_sub_total );
      }                                                 
}
echo array_sum($arrValues);

Veja se funciona.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou tentar usar este seu exemplo para ver se consigo, pq realmente acho q me perdi nesses whiles hehe

 

valeu

 

 

##EDIT##

 

Cara nao entendo muito de array por isso nao sei se foi erro meu...mas coloquei todas as linhas q você passou da sua modificação, e apareceu a mesma coisa, nao fez a soma mostrou os dois valores....assim como antes :(

 

Só completando qdo eu tava fazendo do outro jeito antes de você me passar este esquema...eu tentei utilizar o += e os numeros q apareceram foram 318,7 e 347,7...ou seja tbm nao fez a soma, e nao tenho ideia da onde sairam este numeros

 

ta complicado aqui viu :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza os valores em cima continuaram aparecendo do mesmo jeito mas no final de tudo nao apareceu a somatória???????

Comenta os echos que fazem aparecer o valor em separado dentro do loop. Não é isso??? :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pior que é cara...parece mentira isso, os valores nao aparecem somados, ja coloquei dentro do loop, fora dele, testei dentro e fora de todos os loops, mas nao soma

 

Será q apos o if que checa a categoria eu teria q fazer mais um loop falando para inserir de um a um na variavel $vl_sub_total

 

Abraço

 

PS: cara to em 4 foruns diferentes tentando conseguir isso, e você é o unico q ta tentando me ajudar....valeu mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim e me posta ae oque aparece na tela:

 

$arrValues = array();
while($cp50 = mysql_fetch_array($sql50)){
      // SETO A PORCENTAGEM NA VARIAVEL
      $aumento_porcetagem = $cp50['vl_aumento'];
      //SE A CATEGORIA DE PERCENTUAL ESTIVER NA TABELA CARRINHO ENTAO ELE AUMENTA A PORCENTAGEM SOMENTE NAQUELE PRODUTO
      if($cp50['id_produto_categoria'] == $cp['id_produto_categoria']){
         // FAZ O CALCULO
         $cp['vl_atacado'] = ((ceil($cp['vl_atacado'] + ($cp['vl_atacado'] * ($aumento_porcetagem/100)))) - 0.10);

         //PARA CADA PRODUTO VERIFICO A QUANTIDADE DELE PARA FAZER A MULTIPLICAÇAO PELO VALOR ENCONTRADO ACIMA
         $vl_sub_total = $cp['vl_atacado']  * $cp['qt_produto'];
         $arrValues[] = $vl_sub_total;

         //DOU UM ECHO PARA VER O QUE ESTA VARIAVEL ESTA RECENDO
         //echo $vl_sub_total.'<br>';
         //echo $cp['vl_atacado'].'---<br>';
         //echo $cp['qt_produto'].'<br>';
         //var_dump( $vl_sub_total );
      }                                                 
}
echo '<pre>';
var_dump($arrValues);
echo array_sum($arrValues);

Abraços.

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.