Hamon 1 Denunciar post Postado Março 8, 2016 Olá, pessoal, estou fazendo meu TCC, e os meu amigos dizem que a conta que estou fazendo é errada. Só que já refiz, já procurei em uma calculadora online que calcula porcentagens e bate na mesma. Enfim, aqui está o meu codigo e o resultado: <?php //CASO HOUVER ERROS OU NÃO FOR ESSA A SAIDA, OQ IMPORTA É A CONTA, PQ FIZ O WHILE SÓ PARA EXEMPLIFICAR O MEU PROCESSO, OQ VALE É O CAUCULO //Esses valores aqui nas varaveis vem direto do banco de dados, esses aqui só são exemplos. (Campo Decimal no Banco de dados) $preco_com_juros= 10.00; $juro_porcenagem= 2.00; $i=0; while(5 > 0){ $preco_com_juros_para_db= $preco_com_juros + ($preco_com_juros * $juro_porcentagem / 100) echo $preco_com_juros_para_db; $i++; } ?> O resultado seria isso: 10.20 10.404 10.61208 10.824321600000001 11.040808032000001 Só que na conta de meus amigos que me explicaram como fazer a conta estava dando mais ou menos isso: 10.20 10.40 10.60 10.80 11.00 Pelo que eu vi o calculo no PHP não está arredondando estes valores (O campo usado no banco deados para armazenar esses valores finais são DECIMAL 7,2) Além disso são para guardar valor monetarios. Como faço para arredondar esses números e deixar que nem no exemplo de de baixo(como da a conta dos meus amigos)? E se puderem me dizer se está errado esses primeiros valores que passei, ou está certo, ou qual seria o valor mais certo de se usar (qual dos dois passados). Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Março 8, 2016 round = arredonda seguindo as regras da matemática (funciona igual o number_format); ceil = arredonda para baixo floor = arredonda para cima Compartilhar este post Link para o post Compartilhar em outros sites
Hamon 1 Denunciar post Postado Março 8, 2016 Nesse caso qual eu deveria usar? Testei todos, testei somente com um caculo. Calculo normal, que nem postei acima: 10.2 Calculo com round: 10 Calculo com ceil: 11 Calculo com floor: 10 Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Março 8, 2016 Como eu vou saber... quem definiu as regras de negócio do seu sistema foi você, eu não faço a mínima ideia do que o sistema faz (ou se propõe a fazer), você apenas mostrou que os seus colegas arrendondaram tudo para baixo, inclusive ignorando regras de arredondamento que a gente aprende nas séries iniciais... Compartilhar este post Link para o post Compartilhar em outros sites
Hamon 1 Denunciar post Postado Março 8, 2016 Então como eu usei valor monetario do jeito que fiz está correto? Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Março 8, 2016 Tudo depende do que você está se propondo a fazer, se o seu sistema vai ter casas decimais "ilimitadas" não precisa arredondar, agora se nas regras de negócio você definiu que vai usar o padrão de moeda corrente "usual", ai vai precisar arredondar, já que com exceção da cotação do dólar e dos combustíveis, todo o resto usa apenas 2 casas para centavos... Compartilhar este post Link para o post Compartilhar em outros sites
Hamon 1 Denunciar post Postado Março 8, 2016 Sim, eu vou usar somente 2 casas para o centavos, assim sendo não precisarei arredondar? Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Março 8, 2016 Sim, eu vou usar somente 2 casas para o centavos, assim sendo não precisarei arredondar? Olha só, eu posso estar errado, mas no número que você apresentou: 11.040808032000001 Tem mais do que 2 casas nos centavos... acredito que alguém que esteja no TCC também consiga ter esse mesmo insight... logo, você vai precisar reduzir essa quantidade de alguma maneira, seja arredondo da forma correta, ou da forma que lhe foi passado pelos seus amigos... Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 8, 2016 Não tem algo errado no arredondamento abaixo? 10.824321600000001 => 10.80 Não deveria ser 10.82? Há anos atrás, quando conversei com uma contadora, ela me explicou que todos os valores (no caso de cobranças) são arredondados para baixo (que conhecemos como truncate), ou seja, sua fração 0.004 (10.824321600000001) deve ser ignorada. Isso é por uma questão jurídica, a empresa não pode cobrar a mais (lesar) o cliente, nem que sejam míseros 0.006 centavos (diferença entre 10.824 e 10.83). Agora, o arredondamento de valores, deve ser executado apenas no valor final repassado e não nos valores utilizados durante o cálculo. Compartilhar este post Link para o post Compartilhar em outros sites
Hamon 1 Denunciar post Postado Março 8, 2016 ESerra, desculpa coloquei o numero inteiro, mas no banco de dados ele cai como 11.04. Gabriel, ok, entendo seu ponto de vista e acho cetissimo, MAS como que eu faço pra arredondar tão pouco assim? E eu não entendi 10.824321600000001 => 10.80 Não deveria ser 10.82? Pro banco de dados ele vai com o valor de 10.82 Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Março 8, 2016 <?php $valor = "10.824321600000001"; $arredondar = number_format($valor, 2, '.', ''); echo $arredondar; ?> A saída é 10.82 Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 8, 2016 Qual parte do meu "ponto de vista" está se referindo. Lembrando que, em nenhum momento, eu coloquei meu ponto de vista, apenas um parecer técnico sobre arredondamento em cobranças e o questionamento sobre os exemplos apresentados. Compartilhar este post Link para o post Compartilhar em outros sites