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.

Decimal e o resultado é um cálculo exato do valor, em vez de uma aproximação.

rate = Decimal('1.45')

seconds = Decimal('222') # Tempo em segundos: 3*60 + 42

cost = rate * seconds / Decimal('60')

print(cost)

>>>

5.365

A classe Decimal tem uma função nativa para arredondamento com o número

exato de casas decimais definido pelo código, e com o comportamento (para

cima ou para baixo) desejado.

rounded = cost.quantize(Decimal('0.01'), rounding=ROUND_UP)

print(rounded)

>>>

5.37

O método quantize, usado dessa maneira, também lida de forma esplêndida em

nosso outro caso de uso, o das ligações baratas de curtíssima duração. No

exemplo a seguir, podemos ver que o custo da ligação (variável cost, em tipo

Decimal) ainda é menor que 1 centavo para essa chamada em particular.

rate = Decimal('0.05')

seconds = Decimal('5')

cost = rate * seconds / Decimal('60')

print(cost)

>>>

0.004166666666666666666666666667

Porém, o comportamento do quantize manda arredondar para cima, com um

centavo inteiro.

rounded = cost.quantize(Decimal('0.01'), rounding=ROUND_UP)

print(rounded)

>>>

0.01

Embora Decimal funcione muito bem para números de ponto decimal fixo, ainda

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!