Executando verificação de segurança...
2

Como trabalhar com dinheiro em programação? Lidando com valores monetários com código

Olá pessoa! Vc ta cansado de perder noites tentando entender por que suas contas dos programas que você faz envolvendo dinheiro não batem? Os números de ponto flutuante podem ser bem traiçoeiros quando se trata de dinheiro. E eu resolvi fazer um vídeo com o COMPILADO de toda a minha vivência no assunto trabalhando com Number, Int, Float, Centavos e até micro centavos! (sabia dessa?)

Segue o vídeo do YouTube! e tenho certez que o conteúdo vai ajudar \o
https://www.youtube.com/watch?v=IH_rzjz4_N8

Carregando publicação patrocinada...
3

Uma dica que apresentaram há algum tempo aqui no Tabnews, se não me engano, foi trabalhar sempre com inteiros e nas respostas "converter" os valores para decimais (centavos). Como você já anunciou, números em ponto flutuante são traiçoeiros (em algumas situações específicas) pois não conseguem representar todos números reais (conforme a estratégia de representação eleita). O exemplo clássico que você usou no seu vídeo 0.1 + 0.2 realmente não será exatamente 0.3 na representação IEEE754 cujo comprimento da mantissa é relativamente curto. Enquanto 0,1 e 0,2 (inclusive 0,3) não são dízimas periódicas no sistema decimal, no sistema binário só podem ser representados (parcialmente na prática) por dízimas periódicas!

Matematicamente existem infinitos números entre qualquer par de inteiros sendo que somente alguns deles são representáveis no sistema finito implementado no computador que considera base 2. Ficou bem claro em seu vídeo com o merecido like! :-)

Certas operações com ponto flutuante são catastróficas se não forem bem implementadas. Por exemplo, considerando a mantissa com apenas 20 dígitos, a operação 1.0E+00 + 1.0E-22 resultará simplemente 1.0E+00 e não 1.0000000000000000000001 como desejado (o motivo é bastante lógico). Para operações simples, não é um problema, contudo, para operações recorrentes, séries e outras aplicações que dependam de acumulação de resultados muito precisos, as pequenas diferenças podem ser relevantes e, "cada caso é um caso".

Ah, e muito bem lembrado por você: deve-se atentar não somente à programação das operações no código fonte, mas também ao armazenamento dos valores no banco de dados. Buscar o melhor compromisso para armazenamento, recuperação, conversão preservando o número original é algo que pode ser investigado caso não encontre uma solução ótima para o seu problema ou por defeitos da linguagem de programação escolhida.


Em sua abordagem didática, pode ser vantajoso, em determinadas ocasiões, apresentar explicações sobre problemas clássicos, como os que você já analisou, a fim de atrair um maior número de visitantes para o seu canal no Youtube. Sugiro que, em um próximo vídeo, você explore o tema das transações simultâneas, detalhando os desafios associados a esse fenômeno e as soluções que foram desenvolvidas ao longo do tempo. Essa perspectiva histórica certamente enriquecerá o conteúdo e poderá despertar o interesse do seu público. Aprender com os gigantes, usar as rodas que já aperfeiçoaram para irmos mais longe.