junaooaks 3 Denunciar post Postado Fevereiro 7, 2008 galera to precisando de uma função que me resolva o seguinte: tenho um sistema de pedido o vendedor pode dar até 20% de desconto só que ele não vai ganhar comissão o vendedor ganhar 10% de comissao nas vendas se ele não der desconto então o raciocínio é assim se o vendedor der 0% de desconto na venda ele ganha 10 % nos valor do produto se ele der 1% de desconto na venda ganha 9,5 % nos valor se der 2 % na venda ele vai ganhar 9% nos valor ..... isto vai até o 20% nas vendas é o vendedor ganhar 0% com este raciocínio eu fiz um monte de comparação com o (IF) olha só: if ($venda > $tabela){ $numeros = 0;} if ($numero ==0.00){ $comissao =10;} if ($numero == 0.01){ $comissao =9.5;} if ($numero == 0.02){ $comissao =9;} if ($numero == 0.03){ $comissao =8.5;} if ($numero == 0.04){ $comissao =8;} if ($numero == 0.05){ $comissao =7.5;} if ($numero == 0.06){ $comissao =7;} if ($numero == 0.07){ $comissao =6.5;} if ($numero == 0.08){ $comissao =6;} if ($numero == 0.09){ $comissao =5.5;} if ($numero == 0.10){ $comissao =5;} if ($numero == 0.11){ $comissao =4.5;} if ($numero == 0.12){ $comissao =4;} if ($numero == 0.13){ $comissao =3.5;} if ($numero == 0.14){ $comissao =3;} if ($numero == 0.15){ $comissao =2.5;} if ($numero == 0.16){ $comissao =2;} if ($numero == 0.17){ $comissao =1.5;} if ($numero == 0.18){ $comissao =1;} if ($numero == 0.19){ $comissao =0.5;} if ($numero >= 0.20){ $comissao =0.0;} só que se o vendedor der mais de 20% de desconto gostaria que coloca-se um sinal de (-) negativo na frente quem puder me ajudar tirar este monte de if eu agradeço Compartilhar este post Link para o post Compartilhar em outros sites
Leonardo P 0 Denunciar post Postado Fevereiro 7, 2008 já tentou switch? Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Cobra 0 Denunciar post Postado Fevereiro 7, 2008 Cara, bolei um jeito mas não tenho certeza de que vai funcionar. Teste aí e qualquer coisa poste novamente. // Essa parte deixei assim pois não sabia exatamente o que era if ($venda > $tabela){ $numeros = 0; } // Essa parte substitui todos os if for ($x = 0.00, $y = 10; $x <= 0.20; $x += 0.01, $y -= 0.5) { if ($x == $numero) { $comissao = $y; break; } } Abraço Compartilhar este post Link para o post Compartilhar em outros sites
Leandro Barral 1 Denunciar post Postado Fevereiro 7, 2008 Que instrução FOR mais confusa.. O.o é mais facil usar switch, fica muito mais fácil a manutenção do código. switch ($numero) { case 0.00: $comissao=10; break; case 0.01: $comissao=9.5; break; case 0.02: $comissao=9; break; .... .... } Espero ter sido claro.. Abraço. Sem Mais[]'.. editado......................................................................... .. nao tinha lido linha inteira.. desculpa. a sua alternativa é valida sim. Desculpe o inconveniente.. Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Cobra 0 Denunciar post Postado Fevereiro 7, 2008 Que instrução FOR mais confusa.. O.o é mais facil usar switch, fica muito mais fácil a manutenção do código. Creio que fácil, mesmo, seria utilizar 5 linhas (como no for "confuso") ao invés de mais de 30 (como seria como o switch)... ;) Considerando o objetivo de quem tem a dúvida, o FOR do modo que fiz se aplica perfeitamente. Abraço Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 7, 2008 Na verdade, acho tanto o switch quanto o for soluções ruins. O swytch geraria muitas linhas. O for gastaria memória à toa. Veja se isto satisfaz: function comissao($desconto) { return (10 - ($desconto * 0.5)); } Somente para fins de teste, usei este for: for ($i = 0; $i <= 40; $i++) { echo "Desconto de " . $i . "% => comissão de " . comissao($i) . "%<br />"; } Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Cobra 0 Denunciar post Postado Fevereiro 7, 2008 Perfeita a solução da função. Realmente é a melhor, e é muito melhor do que as outras soluções. No entanto, não concordo de forma alguma que um loop tão pequeno fosse "gastar memória à toa"... ;) Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 7, 2008 No entanto, não concordo de forma alguma que um loop tão pequeno fosse "gastar memória à toa"... ;) Logicamente, o loop é pequeno e não gastaria uma grande memória. Mas a função só executa operações com o valor do desconto. Pensei na função, também, porque o junaooaks quer colocar sinal negativo em descontos superiores a 20%. Isso significa que, teoricamente, não existe um desconto máximo, sendo necessário aumentar o loop. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites