Ir para conteúdo

POWERED BY:

Arquivado

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

Rafael Bazanella

Algorítmo para arredondar parcelas de uma dívida

Recommended Posts

Bom dia caros amigos,

 

estou com um pequeno problema que tenho certeza que algum de vcs pode me ajudar a solucionar, segue:

 

tentarei ser objetivo, tenho a seguinte situação:

 

preciso de uma 'function' que faça o arredondamento de parcelas que resultem em dízimas periódicas após a divisão.

por exemplo: 40000/7 = 5714,285714...

 

as dívidas são em 'sacas de soja', não em R$, por isso as parcelas precisam ser sempre valores inteiros...

ja utilizei o 'round' mas não resolve meu problema, vou explicar o pq:

o 'round' faz, digamos assim, um arredondamento geral das parcelas, no caso acima ele resulta em 7 parcelas de 5714 sacas, o que no final das contas acaba em 2 sacas de prejuízo...

parece pouco, mas se falarmos em dívidas na casa dos milhões de sacas a coisa fica feia :upset:

 

o que eu preciso exatamente é de uma divisão que jogue 'os restos' para as parcelas finais, por exemplo:

1ª 5714, 2ª 5714, 3ª 5714, 4ª 5714, 5ª 5714, 6ª 5715, 7ª 5715

 

Muito grato a quem puder ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

$float = 1.89;
$leftOver = $float - (int) $float;
echo $leftOver; // Mostra 0.89

 

A ideia: utilize (int) $float nas parcelas e vá somando $leftOver até atingir um valor inteiro, então jogue na parcela...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jogue ai o algoritmo que você já fez.

Se você já fez um com o round e ele te deixa um prejuízo, armazene esse valor e compare com o valor total dividido pela quantidade parcelas, caso seja menor pegue o que resta e jogue nas últimas parcelas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jogue ai o algoritmo que você já fez.

Se você já fez um com o round e ele te deixa um prejuízo, armazene esse valor e compare com o valor total dividido pela quantidade parcelas, caso seja menor pegue o que resta e jogue nas últimas parcelas.

 

segue oq tenho até o momento:

 

public function roundPlots ($quantidade, $nParcelas) {
   	$parcelas = array();

   	for ($i=$nParcelas; $i>=1; $i--) {

   		$value = ($quantidade / $i);

    		if (is_int($value)) {
    			$parcelas[] = $value; 
    		} else{
    			$parcelas[] = round($value);
    		}

   		$quantidade = $quantidade - $value;
   	}
   	return $parcelas;
   }

 

este resulta em 7 parcelas de 5714, considerando $quantidade = 40000 e $nParcelas = 7.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso deve resolver seu problema

Irá calcular todas as parcelas arredondadas (para baixo) e colocar a diferença na última parcela.

Não testei....

 

public function roundPlots ($quantidade, $nParcelas) {
   $parcelas = array();
   $valorArredondado = floor( $quantidade / $nParcelas);

   for($i=$nParcelas; $i>=2; $i--){
       $parcelas[] = $valorArredondado;
   }
   $parcelas[] = $quantidade - ( $valorArredondado * ( $nParcelas - 1 ) );
   return $parcelas;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso deve resolver seu problema

Irá calcular todas as parcelas arredondadas (para baixo) e colocar a diferença na última parcela.

Não testei....

 

public function roundPlots ($quantidade, $nParcelas) {
   $parcelas = array();
   $valorArredondado = floor( $quantidade / $nParcelas);

   for($i=$nParcelas; $i>=2; $i--){
       $parcelas[] = $valorArredondado;
   }
   $parcelas[] = $quantidade - ( $valorArredondado * ( $nParcelas - 1 ) );
   return $parcelas;
}

 

Amigo Gabriel Heming, é exatamente isso que eu preciso! :grin:

eu não conhecia esse 'floor'...

ajudou um monte aqui manolo, agradeço! :clap:

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.