Jump to content


Photo

Php Percentual


  • Faça o login para participar
4 replies to this topic

#1 Max William

Max William

    12 Horas

  • Usuários
  • 192 posts
  • Sexo:Masculino
  • Localidade:Maringá - Paraná

Posted 19/03/2010, 11:28

Olá.
É que nunca me veio ao caso criar um percentual de acrescimo então acabei me enrolando aqui.

Situação é a seguinte,
Vamos supor que uma fatura seja no valor de R$ 467,90 com o vencimento no dia 15/03/2010
Hoje é dia 19/03/2010, então esta fatura esta com atrazo de 4 dias.

Atrazo no pagamento gera um acrescimo de 0.25% ao dia.
Porem este calculo, ele não deve ser gerado como total, por exemplo
R$ 467,90 + 1.00%
e sim
467,90 + 0.25% = 469,06975 (arredonda para cima = 469,07)
469,07 + 0.25% = 470,242675 (arredonda para baixo = 470,24)

e assim consecutivamente ate total de dias atrazado.

Meu banco:
Nome			Tipo		NULL
id_fatura		int(11)		não
servico			var_char(255)	não
valor_pendente		decimal(10,2)	não
valor_pago		decimal(10,2)	não
fatura_gerada		date		não
fatura_vencimento	date		não
fatura_paga		int(1)		não
juros			decimal(10,2)	não
atrazada		int(1)		não

Minha logica
Eu vou saber se a fatura esta atrazada, ou vencida desta forma: vou pegar a data de hoje e verificar se ela é iqual ou maior que a data de vencimento
Se for maior, ela esta atrazada, caso contrario ela esta em dia.

Verificar os dias de atrazo, não sei ainda como fazer, mas a principio seria algo como comparar a data de hoje com a data de vencimento e determinar os dias de diferença

calcular os juros.
pensei em algo como.. se eu tiver o numero de dias atrazado, eu faço um for por exemplo, onde eu vou passar a variavel $total como null fora do for, dentro do for ela recebe um valor (fatura) faço o calculo para adicionar os juros (não sei como fazer isso) retorno esta soma na variavel $total, arredondo o valor para cima ou para baixo e repito o loop ate ele atingir o total de dias atrazado.

^^ hehe.. como vo faze isso?

Edição feita por: Max William, 19/03/2010, 11:31.

Se eu lhe ajudei ;) Clique para agradecer!

#2 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 19/03/2010, 11:38

Bom dia Max, Tudo bom?

Pelo início:
$dias_de_atraso = $hoje - $fatura_vencimento;
for($i = 0; $i <  $dias_de_atraso; $i ++){
  $valor_pendente = valor_pendente * 1.025;
}
echo round($valor_pendente);

É só uma ideia para começar.

Abraços.
Mateus Antunes
Mateus Antunes
MBASistemas

#3 Max William

Max William

    12 Horas

  • Usuários
  • 192 posts
  • Sexo:Masculino
  • Localidade:Maringá - Paraná

Posted 19/03/2010, 11:49

@MBA,
Obrigado..

Eu achei que isso não funcionaria

$dias_de_atraso = $hoje - $fatura_vencimento;

também, nem tentei, tava saindo pro almoço e deixei a pergunta no ar aqui ^^
trabalhar com percentual eu nunca trabalhei, valor pendente vc esta multiplicando ele por 1.025?

não entendi essa multiplicação, esta é a forma que se usa para adicionar um percentual a um valor? sendo que o valor do juros é de 0.25/dia?
Se eu lhe ajudei ;) Clique para agradecer!

#4 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 19/03/2010, 12:00

Max, agora que vi.
Está errado o calculo.
É * 1.0025

Pense na matemática.
*1 = 100%;
*0.1 = 10%;
*0.01 = 1%;
-------------
*1 = 100%
*0.0025 = 0.25%
Logo -> 100 + 0.25 = 1.0025;

Como isso é por dia, fiz dentro de uma repetição por dias atrasados.
Só depois fiz o round.
No caso, o round também está errado porque precisamos do parâmetro de casas decimais...

Mas como disse antes, é só uma ideia!
Abraços
Mateus Antunes
Mateus Antunes
MBASistemas

#5 Max William

Max William

    12 Horas

  • Usuários
  • 192 posts
  • Sexo:Masculino
  • Localidade:Maringá - Paraná

Posted 19/03/2010, 13:32

Ja to tendo resultados positivos aqui,
logo mais eu posto a formula.

Contribuindo com a comunidade ;)

Segue abaixo o codigo caso alguem precise

<?php

## Criação:
## Sexta-feira, 19 de março de 2010 as 13:32
## Max William Vitorino
## Project A3 - Hospedagem & Desenvolvimento

# Formato data atual
 $data_atual = explode("-", $data_atual);
 $mes_hoje = $data_atual[1];
 $dia_hoje = $data_atual[2];
 $ano_hoje = $data_atual[0];

# Formato data vencimento
 $vencimento = explode("-", $vencimento);
 $mes_venc = $vencimento[1];
 $dia_venc = $vencimento[2];
 $ano_venc = $vencimento[0];

//calculo timestam das duas datas
 $timestamp1 = mktime(0,0,0,$mes_hoje,$dia_hoje,$ano_hoje);
 $timestamp2 = mktime(4,12,0,$mes_venc,$dia_venc,$ano_venc);

//diminuo a uma data a outra
 $segundos_diferenca = $timestamp1 - $timestamp2;

//converto segundos em dias
 $dias_diferenca = $segundos_diferenca / (60 * 60 * 24);

//obtenho o valor absoluto dos dias (tiro o possível sinal negativo)
 $dias_diferenca = abs($dias_diferenca);

//tiro os decimais aos dias de diferenca
 $dias_diferenca = floor($dias_diferenca) +1;

# Calculo dos juros
 $juros = $juros / 100 +1;

for($i=1;$i<$dias_diferenca;$i++)
{
 # Adicionando os Juros
  $valor = $valor * $juros;

 # Operação para arredondar valor
  $valor = round($valor * 100) / 100;

}
?>

Edição feita por: Max William, 19/03/2010, 13:33.

Se eu lhe ajudei ;) Clique para agradecer!




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq