15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

seconds = 3*60 + 42

cost = rate * seconds / 60

print(cost)

>>>

5.364999999999999

Porém, ao arredondar os centavos, percebemos que o Python arredonda para

baixo. Gostaríamos de arredondar para cima para evitar prejuízos de

arredondamento.

print(round(cost, 2))

>>>

5.36

Digamos que também se queira oferecer chamadas telefônicas de curtíssima

duração entre localidades cujo custo de conexão, para nós, seja extremamente

barato. No exemplo de código a seguir, computamos a conta de uma chamada

com duração de 5 segundos e tarifa de $0,05/minuto:

rate = 0.05

seconds = 5

cost = rate * seconds / 60

print(cost)

>>>

0.004166666666666667

O float resultante é tão baixo que arredonda para zero! Aí não pode, né?

print(round(cost, 2))

>>>

0.0

A solução é usar a classe Decimal, presente no módulo nativo decimal. A classe

Decimal oferece recursos de cálculo matemático com 28 casas decimais. Pode

ser até mais, se necessário – 28 é apenas o default. A classe tenta contornar os

problemas de precisão com número em ponto flutuante introduzidos pela própria

norma IEEE 754, além de dar ao programador mais controle sobre o

comportamento do arredondamento.

Por exemplo, o código a seguir refaz o cálculo da Antártida com um valor em

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!