Eu utilizo funções:
Tente:

//arredondado (8.56,2);
function arredondar_dois_decimal($valor) { 
   $float_arredondar=round($valor * 100) / 100; 
   return $float_arredondado; 
} 
//Funcao
function arredondado ($numero, $decimais) { 
   $fator = pow(10, $decimais); 
   return (round($numero*$fator)/$fator);
 } 


Atts,
Paulo.
VisualP Sistemas.


  ----- Original Message ----- 
  From: sergio santos 
  To: Comunidade PostgreSQL Brasileira 
  Sent: Wednesday, April 08, 2009 3:47 PM
  Subject: Re: [pgbr-geral] Arredondamento pg <> do PHP


  Entendi...
  mais o meu problema continua
  rs

  eu tenho dois relatórios que buscam os mesmos valores no banco de dados...
  só que um é todo detalhado, por isso prociso fazer as contas em PHP, já o 
outro é todo sumarizado e então eu faço as contas na própria SQL.

  logo eu tenho os seguintes valores no banco de dados:
  liquido = 167.69;
  valor_comissao = 0.5;
  valor_comissao_receber = 1;
  numparc = 10;
  numparc_pg = 1;

  em PHP eu faço as contas assim:
  $a = round($liquido*$valor_comissao,2);

  $b = round($a*$valor_comissao_receber,2);
  $c = round($b/$numparc,2);
  $d = round($c*$numparc_pg,2);
  echo round($d,2);

  vai retornar 8.39

  no SQL eu faço as contas assim:
  SELECT 
(ROUND((((valor_liquido*valor_comissao*valor_comissao_receber)/numparc)*numparc_pg),2))
  FROM ...

  vai retornar 8.38

  já tentei fazer um monte de coisas e tudo tá dando errado...
  alguém tem alguma idéia pra poder me ajudar.

  abraços




  2009/4/8 Luigi Castro Cardeles <[email protected]>

    Sim e não :)

    Se você está trabalhando com matemática de ponto flutuante esse é um 
resultado possível.

    Arredondando somente no fim:

    2,34 * 8,67 = 20,2878 ~ 20,29

    se você arredondar individualmente:

    2,34 ~ 2,3
    8,67 ~ 8,7

    2,3 * 8,7 = 20,01

    []'s

    Luigi Castro Cardeles



    2009/4/8 sergio santos <[email protected]> 


      Pessoal
      vejam bem

      essas são minhas variáveis:

          $liquido = 115.71;
          $valor_comissao = 0.5;
          $valor_comissao_receber = 1;
          $numparc = 7;
          $numparc_pg = 1;
          
          Quando eu faço assim:
          
round((($liquido*$valor_comissao*$valor_comissao_receber)/$numparc)*$numparc_pg,2);
          o resultaod é 8.26 ou seja, diferente do arredondamento no PostgreSQL
          
          já quando eu faço passo a passo, ele me retorna o mesmo valor que o 
PostgreSQL está retornando

          $a = round($liquido*$valor_comissao,2);
          $b = round($a*$valor_comissao_receber,2);
          $c = round($b/$numparc,2);
          $d = round($c*$numparc_pg,2);
          echo round($d,2);

      estranho....


      2009/4/8 Osvaldo Kussama <[email protected]> 


        Em 08/04/09, Osvaldo Kussama<[email protected]> escreveu:

        > Em 08/04/09, sergio santos<[email protected]> escreveu:
        >> Pessoal o arredondamento od PosgreSQL funciona assim:
        >> 8.265 = 2.27
        >>
        >> e o do PHP é assim:
        >> 8.265 = 2.26
        >>
        >> tem uma forma de eu forçar o PosgreSQL a arredondar igual ao PHP?
        >>
        >
        >
        > Em primeiro lugar eu duvido que tanto o PostgreSQL quanto o PHP façam
        > o arredondamento acima descrito.
        > Agora se você estiver falando de 8.265 = 8.26, bem isto é o que se
        > espera, matematicamente falando.


        Ooops!
        Queria dizer na frase acima:
        8.265 = 8.27



        >
        > Creio que o PHP também não faz da forma como você descreveu, veja o
        > manua (particularmente os 2 últimos exemplos)l:
        > <?php
        > echo round(3.4);         // 3
        > echo round(3.5);         // 4
        > echo round(3.6);         // 4
        > echo round(3.6, 0);      // 4
        > echo round(1.95583, 2);  // 1.96
        > echo round(1241757, -3); // 1242000
        > echo round(5.045, 2);    // 5.05
        > echo round(5.055, 2);    // 5.06
        > ?>
        > http://br.php.net/round
        >
        > Mas você sempre pode criar sua própria função de arredondamento.
        >
        > Osvaldo
        >
        _______________________________________________
        pgbr-geral mailing list
        [email protected]
        https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral





      -- 
      Sérgio Antônio dos Santos
      Bacharel em Sistemas de Informação
      (31) 8573-7004


      _______________________________________________
      pgbr-geral mailing list
      [email protected]
      https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




    _______________________________________________
    pgbr-geral mailing list
    [email protected]
    https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral





  -- 
  Sérgio Antônio dos Santos
  Bacharel em Sistemas de Informação
  (31) 8573-7004



------------------------------------------------------------------------------
  E-mail verificado pelo Terra Anti-Spam.
  Para classificar esta mensagem como spam ou não spam, clique aqui.
  Verifique periodicamente a pasta Spam para garantir que apenas mensagens
  indesejadas sejam classificadas como Spam. 


------------------------------------------------------------------------------


  _______________________________________________
  pgbr-geral mailing list
  [email protected]
  https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



------------------------------------------------------------------------------



  Nenhum vírus encontrado nessa mensagem recebida.
  Verificado por AVG - www.avgbrasil.com.br 
  Versão: 8.5.285 / Banco de dados de vírus: 270.11.47/2047 - Data de 
Lançamento: 04/08/09 05:53:00
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a