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:
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'
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'
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)
import decimal
dec = decimal.Decimal('10.0')
string_dec = str(dec)
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.)