52

There are tons of topics on here that explain how to convert a string to a decimal, but how do I convert a decimal back to a string?

Like if I did this:

import decimal
dec = decimal.Decimal('10.0')

How would I take dec and get '10.0' (a string) out?

1
  • 5
    Please consult the API documentation before posting a question like this. You will also get good results from simply firing up python, and trying things out. Commented Jun 19, 2012 at 1:49

5 Answers 5

80

Use the str() builtin, which:

Returns a string containing a nicely printable representation of an object.

E.g:

>>> import decimal
>>> dec = decimal.Decimal('10.0')
>>> str(dec)
'10.0'
Sign up to request clarification or add additional context in comments.

5 Comments

+1 Important to note that str() works on pretty much anything in Python.
because most types has the str method implemented
This is somewhat correct and would fail for decimal strings like 0.0000000000000123123 and will print 1.23123E-14. @Matthew has it right (answer below) using the string format function.
@SaikiranYerram That rather depends on whether you consider that to be a reasonable representation of the number. It's unclear what the use case is in the OP, but indeed, if the user doesn't want that notation, the string formatting approach would produce better results.
@SaikiranYerram I don't see why you define an exponential notation output to be "fail"; that might indeed be the desired output.
51

Use the string format function:

>>> from decimal import Decimal
>>> d = Decimal("0.0000000000000123123")
>>> s = '{0:f}'.format(d)
>>> print(s)
0.0000000000000123123

If you just type cast the number to a string it won't work for exponents:

>>> str(d)
'1.23123E-14' 

3 Comments

I don't see anything wrong with E notation in output.
@eraoul Both are valid, depends on the use case (e.g. you might need to send the value to an external API, which doesn't accept values in E notation). If it's just for printing/logging, then I guess it's a matter of preference.
scientific notation is, ironically, entirely useless when you're trying to compare large numbers to what you know your "real math" told you they should be. You need to see all the digits, not "what order of magnitude it is".
9

Note that using the %f string formatting appears to either convert to a float first (or only output a limited number of decimal places) and therefore looses precision. You should use %s or str() to display the full value stored in the Decimal.

Given:

from decimal import Decimal
foo = Decimal("23380.06198573179271708683473")
print("{0:f}".format(foo))
print("%s" % foo)
print("%f" % foo)

Outputs:

23380.06198573179271708683473
23380.06198573179271708683473
23380.061986

(ed: updated to reflect @Mark's comment.)

1 Comment

You're correct that %f-based formatting should be avoided, but I don't see any answers recommending that approach. Note that format(foo, 'f') or "{0:f}".format(foo) don't convert foo to float or lose precision.
4

Almost all the built-ins work on the Decimal class as you would expect:

>>> import decimal
>>> dec=decimal.Decimal('10.0')

A string:

>>> str(dec)
'10.0'

A float:

>>> float(dec)
10.0

An int:

>>> int(dec)
10

Object representation (as it would be in the interactive interpreter):

>>> repr(dec)
"Decimal('10.0')"

Rational number:

>>> import fractions
>>> fractions.Fraction(decimal.Decimal('0.50'))
Fraction(1, 2)

Comments

3
import decimal
dec = decimal.Decimal('10.0')
string_dec = str(dec)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.