dinohills Posted October 25, 2012 Report Share Posted October 25, 2012 (edited) Bom dia,Estou montando um relatório em PHP que vai ser exportado pra PDF e nesse relatório eu sei que cabem 33 itens por folha.E no cabeçalho do relatório eu coloco o número total de páginas que o PDF tem. Até ai tudo beleza !O grande problema é quando minha divisão para achar o número de folhas termina em .0303030303 .Estou usando ceil() para arredontar o resultado para cima.Mas o que eu gostaria de fazer era quando o resultado da conta terminar em .0303030303 eu teria o resultado arredondado para baixo.Só que eu não sei como fazer isso. Alguém pode dar uma ajuda ? Alguns exemplos 34 / 33 = 1.03030303 67 / 33 = 2.03030303100 / 33 = 3.03030303......e por ai vainesses casos gostaria de arredontar o valor para baixo e não para cima como o ceil() faz.Alguma idéia ? Edited October 25, 2012 by dinohills Quote Link to comment Share on other sites More sharing options...
0 dedas Posted October 25, 2012 Report Share Posted October 25, 2012 Você pode usar a função floor() para forçar os números serem arredondados para baixo, ou usar a função round() para ter maior controle sobre o arredondamento. Quote Link to comment Share on other sites More sharing options...
0 dinohills Posted October 25, 2012 Author Report Share Posted October 25, 2012 Bom eu não sei se seria a melhor maneira, mas fiz uma função pra fazer isso pra mim.Fiz alguns testes e acho que ta beleza.function arredonda_div($numero){ $resultado = round($numero/33,10); $explode = explode(".", $resultado); if($explode[1] == '0303030303'){ return round($resultado); }else{ return ceil($resultado); } }Se alguém tiver ou idéia compartilha ai. Quote Link to comment Share on other sites More sharing options...
0 dedas Posted October 25, 2012 Report Share Posted October 25, 2012 (edited) Deixa ela assim:function arredonda_div($numero){ $resultado = round($numero/33,12); $explode = explode(".", $resultado); if($explode[1] == '030303030303'){ return floor($resultado); }else{ return ceil($resultado); } } #Resultado: 1 echo arredonda_div(34);Lembrando que o resto das divisões que você colocou aqui não é 03030303, é na verdade 030303030303. Então, tomei a liberdade de alterar o valor na função. Edited October 25, 2012 by dedas Quote Link to comment Share on other sites More sharing options...
0 dinohills Posted October 25, 2012 Author Report Share Posted October 25, 2012 Alterado !!! E funcionando !!Agora a questão é: Essa seria a melhor forma de se fazer ? Quote Link to comment Share on other sites More sharing options...
0 dedas Posted October 25, 2012 Report Share Posted October 25, 2012 Agora a questão é: Essa seria a melhor forma de se fazer ?Se a função está fazendo o que você precisa, essa é a melhor forma para você :) Agora o problema que eu encontrei foi a seguinte situação: E se o número total de páginas for 75 ? O resto da divisão 75/33 é igual à 2727272727273, então, usando a lógica da sua função, o valor retornado por ela seria 3. Sendo que o valor correto seria 2. Resumindo, minha pergunta é: Qual a lógica da sua função ? Porque você quer arredondar pra baixo apenas os valores de resto 030303030303 e os outros valores você quer arredondar pra cima ? Quote Link to comment Share on other sites More sharing options...
0 dinohills Posted October 25, 2012 Author Report Share Posted October 25, 2012 (edited) Acho que você não entendeu o que eu to fazendo ou eu que não expliquei direito.Mas é assimEu sei que por folha cabem 33 itens certo ?Então se eu tenho 66 itens eu terei 2 folhas. Correto ?O que estava acontecendo é que quando eu tinha 33 itens e mandava gerar o pdf, ele gerava uma folha a mais.Ai eu fui fazendo as contas até chegar na conclusão de que quando o resultado da divisão terminava em 0303030303 o pdf criava uma página a mais não consegui achar ou entender o motivo. Foi isso que aconteceu.Mas eu to fazendo bastante teste e cada vez aumentando o número de itens no relatório pra ver se vai ficar tudo bem. E até agora tá funcionando como esperado.Agora o fato deu querer saber se teria uma outra forma de fazer, é porque mesmo funcionando eu gosto de saber se tem alguma outra alternativa. Que talvez seja melhor ou pior.Mas resumindo está funcionando como eu quero até o momento. Edited October 25, 2012 by dinohills Quote Link to comment Share on other sites More sharing options...
0 dinohills Posted October 25, 2012 Author Report Share Posted October 25, 2012 Só vou postar umas imagens aqui do relatório em pdf como ficou e como ficava antes da função.Relatório normal 4 Páginas Pg1Pg2Pg3Pg4Agora o mesmo relatório como ficava sem a funçãoRelatório Quote Link to comment Share on other sites More sharing options...
Question
dinohills
Bom dia,
Estou montando um relatório em PHP que vai ser exportado pra PDF e nesse relatório eu sei que cabem 33 itens por folha.
E no cabeçalho do relatório eu coloco o número total de páginas que o PDF tem. Até ai tudo beleza !
O grande problema é quando minha divisão para achar o número de folhas termina em .0303030303 .
Estou usando ceil() para arredontar o resultado para cima.
Mas o que eu gostaria de fazer era quando o resultado da conta terminar em .0303030303 eu teria o resultado arredondado para baixo.
Só que eu não sei como fazer isso.
Alguém pode dar uma ajuda ?
Alguns exemplos
34 / 33 = 1.03030303
67 / 33 = 2.03030303
100 / 33 = 3.03030303
......
e por ai vai
nesses casos gostaria de arredontar o valor para baixo e não para cima como o ceil() faz.
Alguma idéia ?
Edited by dinohillsLink to comment
Share on other sites
7 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.