Dean MacGregor
Dean MacGregor

Reputation: 18396

Convert float to Decimal with fixed digits after decimal

I want to convert some floats to Decimal retaining 5 digits after decimal place regardless of how many digits before the decimal place. Is using string formatting the most efficient way to do this?

I see in the docs:

The significance of a new Decimal is determined solely by the number of digits input. Context precision and rounding only come into play during arithmetic operations.

So that means I need to add 0 to force it to use the specified prec but the prec is total digits not after decimal so it doesn't actually help.

The best thing I can come up with is

a=[1.132434, 22.2334,99.33999434]
[Decimal("%.5f" % round(x,5)) for x in a]

to get [Decimal('1.13243'), Decimal('22.23340'), Decimal('99.33999')]

Is there a better way? It feels like turning floats into strings just to convert them back to a number format isn't very good although I can't articulate why.

Upvotes: 1

Views: 843

Answers (1)

Timur Shtatland
Timur Shtatland

Reputation: 12347

Do all the formatting on the way out from your code, inside the print and write statements. There is no reason I can think of to lose precision (and convert the numbers to some fixed format) while doing numeric calculations inside the code.

Upvotes: 1

Related Questions