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 :

conversion float ==> int


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 43
    Par défaut conversion float ==> int
    bonjour,

    je souhaiterais arrondir un nombre (8.3 par exemple) et je rencontre quelques difficultés. En effet mon programme marche dans python mais lorsque je le passe en interface il me met l'erreur suivante : " ValueError: invalid literal for int() with base 10: '8.3' " Je vois bien que le problème vient du point mais je ne sais pas comment y remedier. Quelqu'un a une idée ? ^^



    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
     
     
    def arrondir():
    			liste=ent1.get()
    			liste=liste.split(" ")
    			fen7=Tk()
    			fen7.title('Valeurs arrondies')
    			i=1
    			while (i<len(liste)):
    				diff = float(liste[i])-int(liste[i])
    				if diff<0.5:
    					liste[i]=int(liste[i])
    				else:
    					liste[i]=int(liste[i])+1
    				i+=2
    				liste[i]=Round
    			label= Label(fen7,text="Valeurs arrondies:",font=("arial", 10, "bold italic"),fg='blue')
    			label.place(x=145,y=70)
    			label= Label(fen7,text="Noms",font=("times", 12, "bold italic"),fg='red')
    			label.place(x=130,y=100)
    			label2= Label(fen7,text="Mesures",font=("times", 12, "bold italic"),fg='red')
    			label2.place(x=230,y=100)
    			i=0
    			while (i<len(liste)) :
    				label4= Label(fen7,text=liste[i])
    				label4.place(x=132,y=120+a)
    				label6= Label(fen7,text=liste[i+1])
    				label6.place(x=250,y=120+a)
    				i=i+2

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Salut,

    int() donne en fait la partie entière d’un nombre.
    D’après ton code, tu veux obtenir l’effet d’un round() ('arrondi').
    Il ne faut pas t’embêter à écrire une fonction ’arrondi’, tu dois bien penser que Python a déjà cette fonction.

    De plus je pense que ton
    i=1
    while (i<len(liste)):

    est dû au fait que tu incrémentes i de 2 à chaque tour. Là encore, il faut penser que Python dispose de ce qu’il faut pour rendre le code plus concis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    liste = ['78','8.354387','65','10.9885','3.5742']
     
    for i in xrange(1,len(liste),2):
            liste[i]=round(float(liste[i]))
    print liste
    ['78', 8.0, '65', 11.0, '3.5742']
    Python permet d’itérer sur les objets eux-même qui sont dans une collection:
    for u in liste[1::2]:
    Mais pour pouvoir modifier les éléments au fur et à mesure qu’on itère, il faut utiliser une petite astuce

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    liste = ['78','8.354387','65','10.9885','3.5742']
     
    for i,u in enumerate(liste[1::2]):
            liste[2*i+1]=round(float(u))
    print liste


    Je ne comprends pas ta ligne liste[i]=Round : après avoir arrondi list[i] , tu lui affectes une autre valeur. Tout ton travail précédent est donc rendu vain. C’est quoi Round d’ailleurs ?


    NOTA
    Il y a un module decimal qui permet une plus grande exactitude de la représentation binaire des nombres et une plus grande finesse des calculs, entre autres les arrondis.


    Pour répondre à ta question plus précisément:
    le problème dans ton code vient du fait que pour int([x[, base]]) :
    Convert a string or number to a plain integer. If the argument is a string, it must contain a possibly signed decimal number representable as a Python integer, possibly embedded in whitespace.

  3. #3
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    Moi dans ces cas là je fait ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    a = 10.333554
    b = "%.2f"% a
    Ensuite si tu veux le convertir en float (cette manip le transforme en str) tu fais:
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  4. #4
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 43
    Par défaut
    Oui en fait dans mon programme, il faut rentrer un nom puis une mesure : "jean 18.2 jacques 13.9 martin 18.4" par exemple... comme je travaille sur les valeurs je prend une sur 2. Et je cherche donc a arrondir a la valeur supérieur ou inférieur. Concernant le Round(), une erreur de ma part je voulais tenter quelque chose j'ai oublié de l'enlever

Discussions similaires

  1. Conversion float en int
    Par nikobordx dans le forum C++
    Réponses: 12
    Dernier message: 24/12/2014, 13h03
  2. Conversion float vers int
    Par jeremy75 dans le forum C++
    Réponses: 2
    Dernier message: 20/05/2014, 16h54
  3. Conversion float en int?
    Par romain1 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 06/09/2008, 18h44
  4. probleme de conversion float en int
    Par murreya dans le forum C++
    Réponses: 2
    Dernier message: 17/12/2005, 15h27
  5. Conversion float vers int
    Par vargasvan dans le forum C
    Réponses: 2
    Dernier message: 05/10/2005, 17h29

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