marcosfj1 0 Denunciar post Postado Janeiro 17, 2011 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
gremio10 14 Denunciar post Postado Janeiro 17, 2011 usa o operacional += <?php $a = 5; $a += 10; echo $a;//15 ?> é isso ? Compartilhar este post Link para o post Compartilhar em outros sites
marcosfj1 0 Denunciar post Postado Janeiro 17, 2011 Nao da certo dessa forma cara ja tentei....ele nao soma o 199,90 + 29,90 que daria 229,80 Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Janeiro 17, 2011 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
marcosfj1 0 Denunciar post Postado Janeiro 17, 2011 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
William Bruno 1501 Denunciar post Postado Janeiro 17, 2011 use o Responder Azul: 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
marcosfj1 0 Denunciar post Postado Janeiro 17, 2011 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
William Bruno 1501 Denunciar post Postado Janeiro 17, 2011 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
marcosfj1 0 Denunciar post Postado Janeiro 17, 2011 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
Periscuelo 20 Denunciar post Postado Janeiro 17, 2011 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
marcosfj1 0 Denunciar post Postado Janeiro 17, 2011 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
Periscuelo 20 Denunciar post Postado Janeiro 17, 2011 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
marcosfj1 0 Denunciar post Postado Janeiro 17, 2011 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
Periscuelo 20 Denunciar post Postado Janeiro 17, 2011 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
marcosfj1 0 Denunciar post Postado Janeiro 17, 2011 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
Periscuelo 20 Denunciar post Postado Janeiro 17, 2011 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
marcosfj1 0 Denunciar post Postado Janeiro 17, 2011 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
Periscuelo 20 Denunciar post Postado Janeiro 17, 2011 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
marcosfj1 0 Denunciar post Postado Janeiro 17, 2011 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
Periscuelo 20 Denunciar post Postado Janeiro 17, 2011 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