Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Cálculo juros compostos Boa tarde Devs, fiz uma função para cálculos de juros compostos e armazenar em um TEntry não editável. Coloco o valor atraso = 100,00 automaticamente no campo Taxa = 2,00 e no campo Juros = 4,06. Ao fazer a soma do Valor Atualizado = 106,00. Mas o correto é 106,06. public static function onTaxa($param) { $valor_atraso = (double) str_replace(['.', ','], ['', '.'], $param['v...
PC
Cálculo juros compostos  
Boa tarde Devs, fiz uma função para cálculos de juros compostos e armazenar em um TEntry não editável.
Coloco o valor atraso = 100,00 automaticamente no campo Taxa = 2,00 e no campo Juros = 4,06. Ao fazer a soma do Valor Atualizado = 106,00. Mas o correto é 106,06.

public static function onTaxa($param)
{
$valor_atraso = (double) str_replace(['.', ','], ['', '.'], $param['valor_atraso']);
//$valor_atualizado = (double) str_replace(['.', ','], ['', '.'], $param['valor_atualizado']);
$tempo = 4;
$object = new StdClass;
$object->taxa = number_format( ($valor_atraso * 0.02), 2, ',', '.');
$object->juros = number_format( ($valor_atraso * pow(1+(0.01), $tempo)-$valor_atraso), 2, ',', '.');
$object->valor_atualizado = number_format( ($valor_atraso + $object->taxa + $object->juros), 2, ',', '.');

TForm::sendData('form_Divida', $object);
}

public static function onExitAction($param)
{
$obj = new StdClass;
$obj->taxa = $param['valor_atraso'];

TForm::sendData('form_Divida', $obj);
//new TMessage('info', ' Multa de Atraso 2% ' . $param['taxa']);
}

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (3)


AC

Boa tarde.

Tente fazer o cálculo sem a coerção para double.
NR

Você está usando os valores formatados para fazer a soma, por isso ocorre o arredondamento. Use variáveis intermediárias para armazenar os valores.
PC

//RESOLVIDO
public static function onTaxa($param)
{
$valor_atraso = $param['valor_atraso'];
$data_vencimento = $param['data_vencimento'];

$object = new StdClass;

$data_servidor = new DateTime('now');
$data_vencimento = new DateTime($data_vencimento);
$tempo = $data_servidor->diff($data_vencimento);
$tempo->m;

$object->taxa = number_format($valor_atraso * (2/100), 2, '.', '');
$object->juros = ($valor_atraso * pow(1+1/100, $tempo->m) - $valor_atraso);
$object->juros = number_format($object->juros, 2, '.', '');
$object->valor_atualizado = number_format($valor_atraso + $object->taxa + $object->juros, 2, '.', '');

TForm::sendData('form_Divida', $object);
}

public static function onExitAction($param)
{
$obj = new StdClass;
$obj->taxa = $param['taxa'];
//$obj->data_vencimento = $param['data_vencimento'];

TForm::sendData('form_Divida', $obj);
}