Ir para conteúdo

POWERED BY:

Arquivado

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

[ GuTo ]

loja virtual - pagamento parcelado

Recommended Posts

Fala rapaziada!

 

Hoje é sexta feira, e como toda sexta, eu tô sempre esgotado, minha cabeça não pensa direito mais.

 

Na loja virtual que tô fazendo, tô implementando um sistema onde o cliente escolhe em quantas parcelas quer pagar.

 

Estive fazendo os testes:

 

Valor total: R$32,00

 

ok? quis fazer o pagamento em três parcelas, daí logicamente pensei nisso.

 

valordasparcelas = valortotal / numerodeparcelas ... 32 / 3

 

ok?

não não, hehe.. o valor das parcelas, seria: R$10,666666666666666666666666666667

se eu arredondar este valor, ficará R$10,67.

 

Vamos fazer a prova real?

3 x 10,67 = 32,01 :(

 

Sacaram meu problema?

Quando informo isso (o valor das parcelas) ao banco, ele informa: ERRO!!! Soma dos valores das parcelas é superior ao valor total informado.

 

Preciso criar algo que trate estes valores, mas não consigo pensar nada no momento

 

Algo que deixasse os valores das parcelas de alguma maneira q a soma total delas resultasse no valor total.

 

Recebi duas dicas:

a)

10,68

10,66

10,66

Nesta, ele deixa na primeira a diferença toda, e deixa o restante tudo igual

 

B)

10.67

10.67

10.66

Nesta, ela distribui um pouco da diferença para cada parcela.

 

Alguém tem alguma idéia de como eu poderia resolver isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

eh melhor a segunda opçãovocê ja começou com o codigo??

Compartilhar este post


Link para o post
Compartilhar em outros sites

GuTo...Vamos usar um pouquinho das aulas do PROG em algorítimos...A lógica será muito importante nesse momento, pois não temos funcões prontas para isso...Eu não testei, e não sei se funciona....Se der erro avisaVejamos:

Function RetornaParcelamento(VrTotal,QtdeParcela)Dim vr_divisaoDim vrAuxDim vrAux2Redim vrAux2(QtdeParcela - 1)'=============================='VERIFICAMOS SE A DIVISÃO É EXATA, OU SEJA, SE NÃO HOUVER'SOBRA, QUER DIZER QUE NÃO PRECISAREMOS REFAZER O CÁLCULO'==============================if (VrTotal mod QtdeParcela) = 0 then   vr_divisao = VrTotal / QtdeParcela  vr_aux = 0else   vr_aux = VrTotal mod QtdeParcela 'Quanto sobra   vr_divisao = VrTotal \ QtdeParcela 'Divisão sem sobras barra invertidaEnd if  '---Aqui ele vai jogar a sobre tudo na última parcela  For i = 1 To Ubound(vrAux2)   if i = Ubound(vrAux2) then     vrAux2(i) = vr_divisao + vr_aux   else    varAux2(i) = vr_divisao  End if  Next   RetornaParcelamento = VrAux2      End Function

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brother,Essa da barra invertida eu não sabia! MUITO BOM!Eu tava seguindo sua idéia, mas tava com mais linhas.. essa barra invertida me poupou mtas linhas já!Vou resolvendo aqui, depois posto minha conclusão ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

aí vai o trecho do código... achei que ficou mto bom mesmo

if (VlrTotal mod numParcelas) = 0 then    VlrParcela = VlrTotal / numParcelas    sobra = 0	else    sobra = VlrTotal mod numParcelas 'Quanto sobra    VlrParcela = VlrTotal \ numParcelas 'Divisão sem sobras barra invertida	End if	'Response.Write("<br />sobra"&sobra)    	dim arrParcelas, TIPO, sobra	redim arrParcelas(numParcelas - 1)		TIPO = 3'1 ou 2 ou 3	'Response.Write("<br />")	For x = Lbound(arrParcelas) To Ubound(arrParcelas) step 1  select case TIPO 	 case 1    if x = lbound(arrParcelas) then   	 arrParcelas(x) = vlrParcela + sobra    else   	 arrParcelas(x) = vlrParcela    end if 	 case 2'restante com diferenca    if x = ubound(arrParcelas) then   	 arrParcelas(x) = vlrParcela + sobra    else   	 arrParcelas(x) = vlrParcela    end if 	 case 3    if sobra > 0 then   	 arrParcelas(x) = vlrParcela + 1   	 sobra = sobra - 1    else   	 arrParcelas(x) = vlrParcela    end if 	 case else    Response.Write("erro na aplicacao")    Response.End  end select  arrParcelas(x) = addZero(arrParcelas(x),15)  'Response.Write(arrParcelas(x)&"<br />")	Next

Compartilhar este post


Link para o post
Compartilhar em outros sites

este code ta meio bugadoolha os valores que coloquei e olha o resultadosSE EU POR ACIMA DE 0,50 centavos---------------------------------------------------Total: R$ 1.010,521ª > R$ 336,842ª > R$ 336,843ª > R$ 336,84Final: R$ 1.010,52SE EU POR ABAIXO DE 0,50 centavos---------------------------------------------------Total: R$ 1.010,481ª > R$ 337,002ª > R$ 337,003ª > R$ 336,00Final: R$ 1.010,00nao ahcie onde ta o erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, se isso fosse com PHP, imagino q seria bem menor...Pelo menos akele Case 1 e Case 2 dava pra diminuir legal..(tipo==1)? lbound(arrParcelas) : (tipo==2)? ubound(arrParcelas) : (tipo==3)? sobra--arrParcelas(x)pelo menos com javascript seria assim..hehe..com php deve ser algo parecido...vamos tentar optimar mais essa ae em asp? hehemania por optimização de códigos.. :P ahhh, MARCELO.. queria te dizer OBRIGADO.. desculpe nao ter dito antes.abração brother!

Compartilhar este post


Link para o post
Compartilhar em outros sites

WEBASP,primeiramente, eu faço um tratamento.deixe os valores com apenas duas casas decimais e sem vírgulas.daí começo tudo :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

é Guto mais o certo não seria por o valor e ai ele fazer o calculo ? eu ahcie estranho pra valroes tipo 1000,52 dava certo para 1000,48 dava erradoé que ando meio sem tempo mais vou ver como funciona esta logica qualquer coisa posto ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

velho.. esse exemplo q fiz, funciona arredondando para inteiros.. mas para implementar com decimais, só seguir a lógica q sai de boa, beleza...

 

falow

;)

ASP

[*]

 

[*]<%

 

[*]total = 32

 

[*]t_parcela = 3

 

[*]dim valor_parcela()

 

[*]redim valor_parcela(t_parcela-1)

 

[*]valor_exato = (total - (total mod t_parcela)) / t_parcela

 

[*]valor_sobra = total mod t_parcela

 

[*]

 

[*]for i = 0 to t_parcela-1

 

[*]  valor_parcela(i) = valor_exato

 

[*]  if valor_sobra > 0 then

 

[*] valor_parcela(i) valor_parcela(i) + 1

 

[*] valor_sobra = valor_sobra - 1

 

[*]  end if

 

[*]  response.write "<BR>parcela"&i+1&": "valor_parcela(i)

 

[*]next

 

[*]%>

 

[*]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá GUTO!Estou para solicitar a você se não poderia me enviar este exemplo de carrinho seu para meu email, pois faz dias que estou procurando em fóruns alguem que possa me enviar algum exemplo que de carrinho de compras e não consegui... E tentando agora com você, pois você é a minha ultima tentativa.. venho pedir que se possivel pudesse me enviar para que eu possa estudar, pois não conheço muito de bem de ASP, estou aprendendo aos poucos e até ja tentei fazer uma baseada na VirtuaStore, mas acho ela muito complicada na sua programação.Portanto não poderia me mandar uma COPIA da sua?Ficaria muito grato.Um abraço!E que DEUS TE ABENÇOE.Tudo de BomFica na PAZ.

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.