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 :

Forcer le résultat à 2 chiffres apres la virgule


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Forcer le résultat à 2 chiffres apres la virgule
    Bonjour,

    Je me permet de vous déranger pour une question toute bête...
    Je fais une division dans mon code et il me retourne 8 chiffres apres la virgule, comment faire pour ne garder que 3 chiffres dans résultat.

    MME12 = valCloture*(2/13.0)+MME12old*(1-2/13.0)

    Ce qui donne 12.24644494

    Pourriez vous me dire comment faire pour que MME12=12.465 avec l'arrondi en plus serait la cerise sur le gateau.

    Merci d'avance et bonne fin de journée.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    C'est de l'affichage dont il s'agit ? Tu peux utiliser des %.2f ou ce genre de chose.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    Le module decimal est fait pour ça.

    Il contient tout ce qu'il faut pour arrondir, garder un nombre précis de chiffres après la virgule ... etc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    from decimal import *
     
    val1 = Decimal('7.324655445')
    val2 = Decimal('1.56231455')
     
    result = val1/val2
    roundresult = result.quantize(Decimal('.001'), rounding=ROUND_HALF_UP)
     
    print result
    print roundresult

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci devotre ractivité, je test cela ce soir...

    En fait pour être plus précis, je dois réinjecter cette valeur dans une requête sql via mysql.

    Merci encore.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Je suis désolé de vous solliciter une nouvelle fois mais ne connaissant rien de python j'ai encore besoin de vos conseils...

    Ce code marche presque, il me renvoie bien tous les tuples concernés dans varcondition. En revanche, il ne fait qu'un seul INSERT dans ma table et ne prend pas en compte tous les tuples de varcondition.

    Il me faut aussi régler l'histoire des décimales, malgré votre aide je n'ai pas réussi à transposer le code donné.

    Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    import MySQLdb
    db = MySQLdb.connect('localhost', 'admin', 'adminadmin', 'boursinfo')
    curs = db.cursor()
     
    varcondition = 'Select a.id_histo,a.valeur_cloture, b.MME12, b.MME26,b.MM9,a.instrument_id From Historique a, MACD b Where substr(a.Date,1,10)=curdate() and b.histo_id = (select max(c.histo_id) from macd c where c.instrument_id = a.instrument_id)'
    curs.execute(varcondition)
    curscondition = curs.fetchall()
     
    for row in curscondition:
        idhisto = float(row[0])
        valCloture = float(row[1])  
        MME12old = float(row[2])
        MME26old = float(row[3])
        MM9old = float(row[4])
        instrid = float(row[5])
     
        MME12= valCloture*(2/13.0)+MME12old*(1-(2/13.0))
        MME26= valCloture*(2/27.0)+MME26old*(1-(2/27.0))
        MACD= MME26-MME12
        MM9= MACD*(1/5.0)+MM9old*(1-(1/5.0))
        signal=MACD-MM9
        print MME12old
        print MME12
        print MME26old
        print MME26
        print MM9old
        print MM9
        print instrid
        print valCloture
        print idhisto
        print MACD
        print signal
     
        sqlInsert ='insert into MACD (MME12,MME26,MACD,MM9,signal,histo_id,instrument_id)values (%f,%f,%f,%f,%f,%s,%f)' %(MME12,MME26, MACD, MM9, signal,idhisto,instrid)
    try:
        curs.execute(sqlInsert)
    except:
        db.rollback()
        print "Erreur insert"
    curs.close()
    db.commit()
    db.close()

  6. #6
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 465
    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 465
    Points : 9 257
    Points
    9 257
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Pour ce qui concerne les décimales:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    x = 12.24644494
     
    print round(x,3)
    12.246
     
    print "%.3f" % x
    12.246
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  7. #7
    Membre habitué
    Inscrit en
    Mars 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2003
    Messages : 127
    Points : 149
    Points
    149
    Par défaut
    Il n'ya pas un prb d'indentation dans ton code
    je pense que ton code devrais étre comme ça pour que tous les insert se fassent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    import MySQLdb
    db = MySQLdb.connect('localhost', 'admin', 'adminadmin', 'boursinfo')
    curs = db.cursor()
     
    varcondition = 'Select a.id_histo,a.valeur_cloture, b.MME12, b.MME26,b.MM9,a.instrument_id From Historique a, MACD b Where substr(a.Date,1,10)=curdate() and b.histo_id = (select max(c.histo_id) from macd c where c.instrument_id = a.instrument_id)'
    curs.execute(varcondition)
    curscondition = curs.fetchall()
     
    for row in curscondition:
        idhisto = float(row[0])
        valCloture = float(row[1])  
        MME12old = float(row[2])
        MME26old = float(row[3])
        MM9old = float(row[4])
        instrid = float(row[5])
     
        MME12= valCloture*(2/13.0)+MME12old*(1-(2/13.0))
        MME26= valCloture*(2/27.0)+MME26old*(1-(2/27.0))
        MACD= MME26-MME12
        MM9= MACD*(1/5.0)+MM9old*(1-(1/5.0))
        signal=MACD-MM9
        print MME12old
        print MME12
        print MME26old
        print MME26
        print MM9old
        print MM9
        print instrid
        print valCloture
        print idhisto
        print MACD
        print signal
     
        sqlInsert ='insert into MACD (MME12,MME26,MACD,MM9,signal,histo_id,instrument_id)values (%f,%f,%f,%f,%f,%s,%f)' %(MME12,MME26, MACD, MM9, signal,idhisto,instrid)
        try:
            curs.execute(sqlInsert)
        except:
            db.rollback()
            print "Erreur insert"
        curs.close()
    db.commit()
    db.close

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci à vous tous pour votre aide...
    Le code marche maintenant, trop content.

    Pour info

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    from decimal import *
    import MySQLdb
    db = MySQLdb.connect('localhost', 'admin', 'adminadmin', 'boursinfo')
    curs = db.cursor()
     
    # marche
    varcondition = 'Select a.id_histo,a.valeur_cloture, b.MME12, b.MME26,b.MM9,a.instrument_id From Historique a, MACD b Where substr(a.Date,1,10)=curdate() and b.histo_id = (select max(c.histo_id) from macd c where c.instrument_id = a.instrument_id)'
    curs.execute(varcondition)
    curscondition = curs.fetchall()
     
    for row in curscondition:
        idhisto = float(row[0])
        valCloture = float(row[1])  
        MME12old = float(row[2])
        MME26old = float(row[3])
        MM9old = float(row[4])
        instrid = float(row[5])
        MME12= valCloture*(2/13.0)+MME12old*(1-(2/13.0))
        MME26= valCloture*(2/27.0)+MME26old*(1-(2/27.0))
        MACD= MME26-MME12
        MM9= MACD*(1/5.0)+MM9old*(1-(1/5.0))
        signal=MACD-MM9
     
        print MME12old
        print MME12
        print MME26old
        print MME26
        print MM9old
        print MM9
        print instrid
        print valCloture
        print idhisto
        print MACD
        print signal
     
        sqlInsert ='insert into MACD (MME12,MME26,MACD,MM9,signal,histo_id,instrument_id)values (%f,%f,%f,%f,%f,%s,%f)' %(MME12,MME26, MACD, MM9, signal,idhisto,instrid)
        try:
            curs.execute(sqlInsert)
        except (MySQLdb.ProgrammingError, MySQLdb.OperationalError), error:
            msg = "Error %d: %s" % (error.args[0], error.args[1])
            print msg
    curs.close()
    db.commit()
    db.close()

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

Discussions similaires

  1. [DATA] Forcer 2 chiffres après la virgule
    Par yahnou dans le forum SAS Base
    Réponses: 12
    Dernier message: 25/01/2011, 14h01
  2. Résultat 2 chiffres après la virgule ?
    Par Creanet dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2009, 13h30
  3. Double : forcer 2 chiffres après la virgule
    Par womannosky dans le forum Langage
    Réponses: 2
    Dernier message: 15/01/2009, 16h18
  4. limiter les résultats numérique a 2 chiffres après la virgule
    Par ririrourou dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/05/2008, 17h32
  5. Résultat à 2 chiffres après la virgule
    Par matimat2k4 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/03/2008, 11h10

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