IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

utilisation de décimaux


Sujet :

Python

  1. #1
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Bonjour,
    J'ai besoin de faire des calculs sur des nombres avec 14 chiffres après la virgule. J'ai trouvé le module "Decimal".
    Je ne sais pas comment convertir le résultat de mes calculs (qui a la précision par défaut du module Decimal : 32 chiffres décimaux) en une string ayant 14 chiffres décimaux.
    De plus, j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> prec = Decimal(10) ** -14
    >>> d= Decimal( '12.12345678901234567890')
    >>> print d.quantize(prec)
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
      File "/usr/local/lib/python2.4/decimal.py", line 1824, in quantize
        return self._rescale(exp._exp, rounding, context, watchexp)
      File "/usr/local/lib/python2.4/decimal.py", line 1870, in _rescale
        return context._raise_error(InvalidOperation, 'Rescale > prec')
      File "/usr/local/lib/python2.4/decimal.py", line 2267, in _raise_error
        raise error, explanation
    decimal.InvalidOperation: Rescale > prec

    Dans la même lignée, quelle est la syntaxe pour faire une addition de décimaux. Je n'arrive pas à utiliser la méthode add() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    from decimal import *
    a=Decimal(2)
    b=Decimal(3)
    add(a,b) ???
    decimal.add(a,b) ???
    c.add(a,b) ???
    merci

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Bizarre, chez moi ça marche, et ça donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Decimal('12.12345678901235')
    qui a bien 14 décimales.

    ???

    Tyrtamos

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par awalter1 Voir le message
    a=Decimal(2)
    b=Decimal(3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print Decimal(2) + Decimal(3)
    Decimal('5')
    Tyrtamos

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 699
    Par défaut
    Salut,
    Quelle version de Python utilisez vous?
    Dans la trace, on voit "/usr/local/lib/python2.4/decimal.py" qui laisserait penser que çà a été installé bizaremment ou que la version est 2.4.
    Ca affiche quoi lorsque vous lancez Python à la console?

    De façon générale, pour travaillez avec 14 chiffres de précision, il suffit de dire get_context().prec = 14. quantize c'est plutôt pour afficher le résultat avec "moins" de décimales.
    Exemple: Si vous comptez des Euros vous pouvez travailler avec 14 décimales mais pour faire les chèques vous ne pourrez en utiliser que 2.

    Quel est la vraie raison d'avoir 14 décimales?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Comme indiqué dans la doc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    >>> from decimal import*
    >>> d = Decimal( '12.12345678901234567890')
    >>> prec = Decimal(str(10**-14))
    >>> d.quantize(prec)
    Decimal('12.12345678901235')
    >>> dd = Decimal('2.256345')
    >>> d + dd
    Decimal('14.37980178901234567890')
    >>> d - dd
    Decimal('9.86711178901234567890')
    >>> d / dd
    Decimal('5.373051013480804433231620164')
    >>>
    http://docs.python.org/library/decim...module-decimal

  6. #6
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Merci pour vos réponses.
    je travaille en python 2.4.4.
    la méthode quantize() marche en effet maintenant, je ne sais pas pourquoi j'avais une erreur !!!
    La fonction add() n'est pas nécessaire, j'utilise +
    Pour imprimer un décimal, je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "%f" % (Decimal('0.12345'))
    et ça marche.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utilisation fonction log avec décimaux
    Par louiz31 dans le forum Calcul scientifique
    Réponses: 7
    Dernier message: 02/07/2009, 12h04
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo