Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera,
Tenho o seguinte código:
$valor1 = "349.90";print "valor1: ".$valor1."<br>";$desconto = "5"; #5%print "desconto: ".$desconto."%<br>";$vl_desc = ($valor1 $desconto)/100;print "valor do desconto: ".$vl_desc."<br>";$valor1_cdesc = $valor1 - ($valor1 $desconto)/100;print "valor1 com desconto: ".$valor1_cdesc."<p>";$soma1 = $valor1_cdesc + $vl_desc;print "subtotal produto1: ".$soma1." (deve ser igual a valor1)<p>";$valor2 = "22.90";print "valor2: ".$valor2." (não tem desconto)<p>";$soma = $valor1_cdesc + $valor2;print "total: ".$soma;
DEMO AQUI
Preciso enviar para um webservice os valores dos produtos de forma "pagável" e que a variável $soma1 seja exatamente igual ao $valor1.
Sempre retorna diferença de 0,01 quando arredondo "valor do desconto" e "[/size]valor1 com desconto[/size]".[/size]
Alguém tem ideia de como fazer essa conta bater e enviar o "valor do desconto" e "valor1 com desconto" de forma "pagável"?
Coloquei outros exemplo no DEMO. Alguém sabe como calcular corretamente? LINK DEMO
>
Seu problema está na forma de cálculo.
Você não deve calcular o valor de desconto e valor a pagar e depois fazer o truncate.
Primeiro calcule o valor a ser descontado, e depois remova esse valor:
/ Por experiência, sempre arredonde os descontos para cima, clientes ficam felizes.. /
$vl_desc = ceil(($valor1 * $desconto) / 100);
$valor1_cdesc = $valor1 - $vl_desc;
Não posso arredondar, porque tenho que enviar o valor do item, o valor do desconto e o total para um WebService. Os valores tem que bater certinhos.
Entenda que não existe meio centavo. Se ele aparecer, deve ser removido, de uma forma ou outra.
Não é possível sem arredondar, verifique com a contabilidade/financeiro qual a regra utilizado para esses casos.
Vou entrar em contato com eles e verificar qual é a regra. Obrigada por enquanto!
Seu problema está na forma de cálculo.
Você não deve calcular o valor de desconto e valor a pagar e depois fazer o truncate.
Primeiro calcule o valor a ser descontado, e depois remova esse valor:
/ Por experiência, sempre arredonde os descontos para cima, clientes ficam felizes.. /