Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia, gostaria de uma ajuda com o seguinte problema: Estou desenvolvendo um sistema de gerenciamento de despesas e afins, meu problema esta na hora de dividir determinada "conta" em parcelas, por exemplo: 1000 foi dividido em 10 parcelas iguais, sendo assim 1000/10 igual a 100 por parcela. Até aqui nenhum problema, o problema se inicia quando eu tenho valores que possuem mais que duas casas decimais por exemplo 1000 foi dividido em 3 parcelas, sendo assim 1000/3 igual a 333,3333333333333, mas eu não pretendo gravar com esse número de casas decimais e assim sendo tenho prolemas na hora que vou verificar o valor das parcelas pois o usuario entende que o sistema dividiu os 1000 em 333,33 por parcela mas quando faço 333,33 * 3 (para retornar o valor total) tenho 999,99 e não 1000.
Pensei em gravar todas as casas decimais ou pelo menos salvar um numero maior delas para evitar esse tipo de problema mas logo em seguida tenho outro pois não sei o número máximo de casas decimais que poderão existir.
Bom, tentei utilizar o float() só que o mesmo grava 333,333 em vez de 333,3333333333333
Na verdade, é um pouco mais complexo que apenas dividir e "truncar". Apesar que é necessário arredondar o número.
Você deve realmente dividir (inserir em cada parcela). Quando trabalhei com cálculos contábeis, poderia ser feita a escolha de inserir o restante na primeira ou na última parcela, ou até dividir os centavos por parcela.
Aqui, eu acrescento o valor residual, das parcelas, na primeira parcela:
$valorTotal = 1000.00;
$parcelas = 3;
$valorParcela = $valorTotal / $parcelas;
$valorParcela = round($valorParcela , 2);
$valorPago = $valorParcela * $parcelas;
$sobra = round($valorTotal - $valorPago , 2);
for($i = 1 ; $i <= $parcelas ; $i++) {
echo 'parcela '.$i.' -> '.($i == 1 ? $valorParcela + $sobra : $valorParcela).'<br />';
}
Saída:
parcela 1 -> 333.34parcela 2 -> 333.33 parcela 3 -> 333.33
A principio consegui resolver o problema, muito obrigado sr. Gabriel Heming
Bom dia sr. Fernando Batels
Existe um comando number_format do PHP seria o mais interessante e o valor 1000 ao ir para o number_format ficaria 1000.00 assim seria o correto para a formatação, no banco de dados o campo que receberá o valor poderá ser um float o mais compatível para números.