Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá gente.
Tenho o seguinte script que gera as parcelas do valor de um produto.
function valorParcela( $valor, $nr_parcela )
{
return number_format( ( $valor / $nr_parcela ), 2, ',', '' );
}
for ( $i=1; $i <=12; $i++ ){
echo '<pre>'.$i .' - '.valorParcela( '108.60', $i ).'</p>';
}
A saída do script acima fica assim:
1 x 108.60 - 108.60 - este é o valor do produto
2 x 54.30 - 108.60
3 x 36.20 - 108.60
4 x 27.15 - 108.60
5 x 21.72 - 108.60
6 x 18.10 - 108.60
7 x 15.51 - 108.57
8 x 13.58 - 108.64 -> maior que o valor do produto
9 x 12.07 - 108.63
10 x 10.86 - 108.60
11 x 9.87 - 108.57
12 x 9.05 - 108.60
Como faço para corrigir isso?
Senti falta de uma coisa nesta função, que é entrada. Não vai precisar?
Geralmente uso assim:
function valorParcela( $valor, $valor_pago, $parcelas ) {
$valor_parcela = ($valor - $valor_pago) / $parcelas;
$resto = ( $valor_parcela - (int) $valor_parcela ) * $parcelas;
$valor_parcela_inteiro = floor( $valor_parcela );
if ($valor_pago > 0) {
$primeira_parcela = $valor_pago;
$limite = $parcelas + 1;
} else {
$primeira_parcela = $valor_parcela_inteiro + $resto;
$limite = $parcelas;
}
$parcela[] = round($primeira_parcela, 2);
for ( $i = 2; $i <= $limite; $i++ ) {
$parcela[] = $valor_parcela_inteiro;
}
return $parcela;
}
echo '<pre>';
print_r(valorParcela( '108.60', '8.60', '6')); // Venda no valor de 108.60. Entrada de 8.60 e dividiu em 6 parcelas.
echo '</pre>';
Saída:
Array( [0] => 8.6 [1] => 16 [2] => 16 [3] => 16 [4] => 16 [5] => 16 [6] => 16)
As parcelas são referente ao parcelamento em cartão de crédito sem juros e sem entrada, onde o cliente poderá escolher em quantas vezes quer fazer.
Se o valor do produto é R$ 108,60; não posso mostar isso:
8 x 13.58 - 108.64
Olha, o
Gabriel Heming resolveu seu problema com o link que te enviou
Com o link do Gabriel vai gerar o valor de cada parcela da fatura, mas o cliente já teria que ter escolhido em quantas vezes quer fazer.
Se eu utilizar o script do link vou ter algo assim:
valor R$ 180.60
parcela 1 -> 9.05
parcela 2 -> 9.05
parcela 3 -> 9.05
parcela 4 -> 9.05
parcela 5 -> 9.05
parcela 6 -> 9.05
parcela 7 -> 9.05
parcela 8 -> 9.05
parcela 9 -> 9.05
parcela 10 -> 9.05
parcela 11 -> 9.05
parcela 12 -> 9.05
O que eu estou querendo é o mesmo que tem aqui: ver parcelas
Abaixo do preço tem uma tabela com o valores do parcelamento.
Quero mostar para o cliente as vezes que ele pode fazer no cartão um produto.
Se não ficou claro perguntem.
Segue, estava batendo a cabeça nisto ontem e como já fiz e já resolvi meu problema nada melhor que compartilhar,
Não comentei nada na função, mais ta fácil implementar.
<?php
function calcularParcelamento($capital, $taxa, $tempo, $semjuros ){
$parcelamento = array();
for($i=1; $i<= $tempo; $i++){
$m = $capital * pow((1 + $taxa/100),$i);
if( $semjuros == 0 ) {
//Todas as parcelas sem juros
$parcelamento[$i] = array(
'parcela'=>number_format(($capital/$i), 2, ',', '.'),
'total'=>number_format($capital, 2, ',', '.'));
} else {
if( $i >= $semjuros){
$parcelamento[$i] = array(
'parcela'=>number_format(($m/$i), 2, ',', ''),
'total'=>number_format($m), 2, ',', '');
}else{
$parcelamento[$i] = array(
'parcela'=>number_format(($capital/$i), 2, ',', '.'),
'total'=>number_format($capital, 2, ',', '.'));
}
}
}
return $parcelamento;
}
$capital=500;
$taxa=1.990;
$tempo=24;
//Primeira parcela sem juros = 1; //Primeira parcela com juros = 2;
//Todas as parcelas sem juros = 0;
$semjuros=1;
$valorParcela = calcularParcelamento($capital, $taxa, $tempo, $semjuros);
echo '<pre>';
print_r( $valorParcela );
Fiz baseado neste simulador do bcash, então ta funcionado.
Basta você pegar o valor final do parcelamento, subtrair do valor original, se for maior pega a diferença e remove da primeira ou da última parcela.