PHP arredondar dizima centavos - round fractional cents

Para dividir um valor em X vezes nem sempre dá um numero inteiro, sendo assim criei uma fórmula para calcular o valor e cobrar a diferença (a maior ou a menor) na ultima parcela:

Exemplo prático 1:

Total: 4128
Parcelas=7
Valor quebrado antes do programa= 589,7142857142

Depois de rodar o programa teremos:

Parcela 1:  589.71
Parcela 2:  589.71
Parcela 3:  589.71
Parcela 4:  589.71
Parcela 5:  589.71
Parcela 6:  589.71
Parcela 7:  589.74

Ou seja na parcela 7 há 0,03 centavos a mais para fechar o valor quebrado (589,7142857142).

Exemplo prático 2:

Total: 56000
Parcelas= 12
Valor quebrado antes do programa= 4666,66666666666667

Depois de rodar o programa teremos:

Parcela 1:   4666.67
Parcela 2:   4666.67
Parcela 3:   4666.67
Parcela 4:   4666.67
Parcela 5:   4666.67
Parcela 6:   4666.67
Parcela 7:   4666.67
Parcela 8:   4666.67
Parcela 9:   4666.67
Parcela 10:  4666.67
Parcela 11: 4666.67
Parcela 12: 4666.63

Ou seja na parcela 12 há 0,04 centavos a menos para fechar o valor quebrado (4666,66666666666667).

<?php

$total_pagamento="4128.00";
$parcelas="7";
$valor_quebrado=round(($total_pagamento/$parcelas),2);
$valor_quebrado_total=round($total_pagamento-($valor_quebrado*$parcelas),2);

for ($i=1;$i<=$parcelas;$i++) {
            if ($i==$parcelas) $valor_quebrado=$valor_quebrado+$valor_quebrado_total;
            echo "Parcelamento $i:  $valor_quebrado<br/>";
}

?>

Comentários

  1. Show de bola. Justamente o que estava procurando para implementar no meu sistema com geração de boleto do NFePHP. Bem legal. Parabéns!!!

    ResponderExcluir
  2. Perfeito!! estou gerando parcelas no financeiro de uma empresa, era isso mesmo. vlwww

    ResponderExcluir

Postar um comentário

Postagens mais visitadas