web-dev-qa-db-fra.com

Python décimal en chaîne

Il y a des tonnes de sujets ici qui expliquent comment convertir une chaîne en décimal, mais comment puis-je reconvertir une décimale en chaîne?

Comme si je faisais ça:

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

Comment pourrais-je prendre dec et obtenir '10.0' (une chaîne)?

36
gfrung4

Utilisez la str() intégrée , qui:

Renvoie une chaîne contenant une représentation bien imprimable d'un objet.

Par exemple:

>>> import decimal
>>> dec = decimal.Decimal('10.0')
>>> str(dec)
'10.0'
50
Gareth Latty

Utilisez la fonction de format de chaîne:

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

Si vous tapez simplement cast le nombre dans une chaîne, cela ne fonctionnera pas pour les exposants:

>>> str(d)
'1.23123E-14' 
28
Matthew Roberts
import decimal
dec = decimal.Decimal('10.0')
string_dec = str(dec)
4
mVChr

Presque tous les éléments intégrés fonctionnent sur la classe Decimal comme vous vous en doutez:

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

Un string:

>>> str(dec)
'10.0'

Un flotteur:

>>> float(dec)
10.0

Un int:

>>> int(dec)
10

Représentation d'objets (comme ce serait dans l'interpréteur interactif):

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

Nombre rationnel:

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

Notez que l'utilisation de la mise en forme de chaîne %f Semble soit convertir en un flottant en premier (ou produire uniquement un nombre limité de décimales) et perd donc sa précision. Vous devez utiliser %s Ou str() pour afficher la valeur complète stockée dans la décimale.

Donné:

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

Les sorties:

23380.06198573179271708683473
23380.06198573179271708683473
23380.061986

(ed: mis à jour pour refléter le commentaire de @ Mark.)

1
Ryan