Ir para conteúdo
11closed

Qual a melhor forma de gravar valores financeiros com dizimas

Recommended Posts

Olá, boa tarde! 

Estou com uma duvida, que pelo o que pesquisei, é bastante discutida nas comunidades de programadores e cada um fala uma coisa, por tanto vim até aqui para tentar chegar a uma conclusão.

 

Gostaria de gravar valores financeiros no BD de alguma forma que não traga problemas futuros, por causa de possiveis arredondamentos automaticos.

Quero saber qual o melhor mecanismo para gravar no campo de valores financeiros, valores com decimais e dizimas, exe: 0.2308, 128.997, 1.28989 ..etc independentemente da quantidade de numeros no dizimas, eu preciso saber a quantidade exata.

 

Obrigado, no aguardo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro puramente de forma matemática definindo: dizima periodica é um numero infinito gerado por uma fração, portanto você nunca conseguirá armazenar ela exata na forma decimal, você pode ocupar o espaço inteiro do seu HD armazenando ela e não vai ser suficiente pois é infinita. você pode armazenar ela completa na forma fracionária e quando precisar usar extrai da fração, no resultado será arredondado.

 

Quanto ao resto.

 

O sistema financeiro prevê apenas 2 dígitos decimais, postos de gasolina por exemplo usam 3 digitos, mas na pratica o 2,899 é 2,90 aquilo é só marketing.

 

Até em engenharia espacial chega um momento que as casas decimais se tornam desprezíveis e se arredonda.

 

Uma vez que o sistema monetário prevê 2 digitos decimais, não vejo problema nenhum em ele registrar apenas 2 decimais. 

 

Se seu produto é calculado em mais decimais como no exemplo do posto utilize 3 casas, no final vai acabar virando 2. Utilize a quantidade decimal que seu produto demanda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valores financeiros que dizer dinheiro , a menor divisão de dinheiro é o centavo , logo até a segunda casa decimal.

Em alguns casos como venda de combustível a lei permite usar o milésimo mas não é preço e sim um multiplicador , no final se paga até o centavo.

Você deve ver com o usuário do sistema ou na legislação como tratar , restos , residuos etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá pessoal, bom, primeiramente obrigado pela  resposta :) 

 

O sistema que estou criando tem uma divisão de lucros monetários, e em alguns casos essas divisão de lucros é bem pequena, mas mesmo assim eu preciso contabiliza-la, vou tentar explicar da maneira mais rapida.

Exemplificando: Em uma determinada ação financeira do script gera um valor total de $1,30 o script busca 10% desse valor $0,13 e depois esse valor é distribuído para varios campos, sendo que cada campo tem sua própria % sobre esse pequeno valor a buscar.

 

campo1 0,369000000 % $0,000479700000000000
campo2 1,845000000 % $0,002398500000000000
campo3 6,150000000 % $0,007995000000000000
campo4 12,669000000 % $0,016469700000000000
campo5 6,519000000 % $0,008474700000000000
campo6 61,500000000 % $0,079950000000000000
campo7 4,428000000 % $0,005756400000000000
campo8 6,519000000 % $0,008474700000000000

 

Esse foi só um exemplo de como deve funcionar. 

No MYSQL quais TIPO de campos seria mais adequado para utilizar e com quais tamanho? (DECIMAL, double ou float)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.