Ir para conteúdo

Arquivado

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

junaooaks

função melhor que o if

Recommended Posts

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.