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 :

Nombre décimal rationnel


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut Nombre décimal rationnel
    Bonjour,

    question basique:

    In [1]: a=0.333 ; print(a)
    0.333

    In [2]: print(type(a))
    <type 'float'>

    In [3]: a=1/3 ; print('%.3f' %a)
    0.000

    In [4]: print(type(a))
    <type 'int'>
    pourquoi?

    comment lui faire comprendre que 1/3 = 0.333 sans écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     a=(.1/3)*10 ; print(a)
    0.333333333333
    Dans mon code original

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    alpha0=28824000000
    mu0=24576000000
    a0ref=alpha0/(alpha0+2*mu0)

    a0ref retourne 0

    Merci

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Salut,

    Je pense que tu es mûr pour passer à Python 3.

    Et il est temps.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    j'suis con

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a=1/3.; print('%.4f' %a)
    0.3333
    EDIT: oui j'pigeais pas pourquoi les exemples sur le net ne faisaient pas apparaitre le pb.. Franchement pour un langage scientifique, python chipote..

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 681
    Points
    13 681
    Billets dans le blog
    1
    Par défaut
    Tu ne serais pas surtout en train d'afficher en forçant un format flottant, pour rajouter à la confusion ?

    Python 3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> a = 3
    >>> type(a)
    <class 'int'>
    >>> print(a)
    3
    >>> print('%f' % a)
    3.000000
    De plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> 1/3
    0.3333333333333333
    >>> 1//3
    0

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Dans les anciennes versions de python

    si a=3 :
    alors : 1/a= 0


    mais si a=3.
    alors : 1/a= 0.333

    Je n'ajoute aucune confusion et ce n'est nullement juste une question d'affichage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    In [1]: a=3
     
    In [2]: print(1/a)
    0
     
    In [3]: a=3.
     
    In [4]: print(1/a)
    0.333333333333
     
    In [5]: a=3
     
    In [6]: print((1/a)*100)
    0

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 681
    Points
    13 681
    Billets dans le blog
    1
    Par défaut
    Déjà si tu précisais la version de Python, on gagnerait du temps.

    T'as rien compris ? Dommage...

    Je te la refais en Python 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>>a = 3
    >>>1 / a
    0
    >>>1. / a
    0.3333333333333333
    >>>type(a)
    <type 'int'>
    >>>print a
    3
     >>>print('%f' % a) 
    3.000000
    3. est un flottant, 3 est un entier. / fait une division en respectant les types autour. Si tu fais 1 / 3, ça fait une division entière ; si tu fais 1 / 3., tu fais une division flottante.

    Ce n'est nullement une question d'affichage ? Et que crois-tu que ton '%.4f' fait ?

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 352
    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 352
    Points : 36 876
    Points
    36 876
    Par défaut
    Salut,

    Citation Envoyé par Newenda Voir le message
    Rien compris.

    Non dans les anciennes versions de python

    si a=3 :
    alors : 1/a= 0

    mais si a=3.
    alors : 1/a= 0.333
    Il n'y a rien à comprendre: c'est la conséquence d'un choix discutable fait dans les premières versions de Python qui se corrige dans les versions 2.2+ grâce à from __future__ import division ou au lancement de Python avec l'option "-Qnew", correction qui a été intégrée dans Python3.
    Les discussions sur ces sujets et la correction datent du premier semestre 2001 i.e. plus de 15 ans.

    La vraie question serait plutôt de savoir pourquoi un débutant(*) utilise encore Python2 alors que Python3 est disponible depuis 2008 (bientôt 10 ans) et se torture le cerveau avec des problèmes qui n'en sont plus.
    (*) sinon, vous sauriez où chercher la réponse à vos questions dans la documentation ou dans les vieilles discussions ;-)

    - W

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

Discussions similaires

  1. [MySQL] mettre nombre décimal en entier
    Par splouf dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 18/01/2006, 12h20
  2. Réponses: 4
    Dernier message: 21/12/2005, 12h20
  3. [VB.NET] Nombre décimal
    Par Sadneth dans le forum ASP.NET
    Réponses: 8
    Dernier message: 25/11/2005, 12h41
  4. insérer un nombre décimale dans une table
    Par mouloudéen dans le forum Access
    Réponses: 4
    Dernier message: 02/10/2005, 21h29
  5. CRITERIA - Représentation binaire d'un nombre décimal signé.
    Par RamDevTeam dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 10/08/2005, 14h56

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