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

 C Discussion :

Affichage d'un type double.


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 51
    Par défaut Affichage d'un type double.
    Bonjour à tous,

    ma question vous paraitra sans doute stupide mbon je me lance quand meme.
    Voila je recupere une variable de type double (c'est un temps donc 1,545).
    Comment faire pour n'afficher que les seconde et que les milliseconde?
    je souhaiterais egalement que lorsque la partie seconde arrive à 60 elle revienne à zero.

    voila en esperant que quelqu'un pourra me repondre


  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 452
    Par défaut
    Comment est codée ta valeur dans ton double ? Si, comme je le suppose, il s'agit d'une forme « secondes,millisecondes », ton problème consiste donc à extraire les parties entière et décimale de ton float.

    Le plus simple pour extraire la partie entière reste le cast : (int)x. Ensuite, tu peux soustraire cette partie entière à ta valeur initiale pour ne conserver que la partie rationnelle.

    Enfin, si tu veux faire boucler ton nombre de secondes entre 0 et 59, tu utilises le modulo avec % :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("%d\n",secondes % 60);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 51
    Par défaut
    oui c'est ca.
    seconde,milliseconde.
    j'ai deja fais un cast pour avoir la partie entiere.
    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    double diff;
    int buffer1 = 0,buffer2 = 0;
    buffer1 = (int)diff;
    buffer2 = diff - buffer1;
    printf("Temps ecoule : %.2d :: %.2d , %.3d",buffer1/60,buffer1%60,buffer2)
    mais ca ne marche pas buffer2 vaut toujours zero.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 963
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 963
    Par défaut
    Gao,
    Citation Envoyé par kobalt02 Voir le message
    oui c'est ca.
    seconde,milliseconde.
    j'ai deja fais un cast pour avoir la partie entiere.
    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    double diff;
    int buffer1 = 0,buffer2 = 0;
    buffer1 = (int)diff;
    buffer2 = diff - buffer1;
    printf("Temps ecoule : %.2d :: %.2d , %.3d",buffer1/60,buffer1%60,buffer2)
    mais ca ne marche pas buffer2 vaut toujours zero.
    Ton calcul diff - buffer1 extrait la partie décimale de diff, et vaut donc [0 1[, et tu mets le résultat dans un entier ==> = 0

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 452
    Par défaut
    Citation Envoyé par kobalt02 Voir le message
    mais ca ne marche pas buffer2 vaut toujours zero.
    Normal, puisque buffer2 est un int.

    1,545 - 1 = 0,545. Casté en int à son tour, ça donne bien 0. Si tu es sûr que tes millisecondes ne dépasseront jamais trois chiffres, supprime la partie entière, puis multiplie diff par 1000 avant de faire l'affectation.

    Méfie-toi également des casts implicites. Il se peut dans certains cas que lors d'une opération entre membres hétérogènes, le suivant soit casté dans le type du précédent. Il peut en résulter une perte d'info difficile à déceler.

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 963
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 963
    Par défaut
    Hoe,
    Citation Envoyé par Obsidian Voir le message
    ...
    Si tu es sûr que tes millisecondes ne dépasseront jamais trois chiffres,
    ...
    Hum.

    Je vois mal des millisecondes, dans le cas présent, partie décimale d'une valeur exprimées en secondes, dépasser 3 chiffres.

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 452
    Par défaut
    Citation Envoyé par droggo Voir le message
    Hoe,

    Hum.

    Je vois mal des millisecondes, dans le cas présent, partie décimale d'une valeur exprimées en secondes, dépasser 3 chiffres.
    Ooh ! On ne sait jamais, en informatique ! :-)

    Plus sérieusement, il s'agit d'un nombre à virgule flottante, avec ses imprécisions, pas d'un registre à trois caractères. Il ne serait pas étonnant qu'au cours de certaines manipulations, on se retrouve avec un nombre à plein de décimales. Par exemple, une division par 1.2 ou autre ...

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 963
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 963
    Par défaut
    Hai,
    Citation Envoyé par Obsidian Voir le message
    Ooh ! On ne sait jamais, en informatique ! :-)

    Plus sérieusement, il s'agit d'un nombre à virgule flottante, avec ses imprécisions, pas d'un registre à trois caractères. Il ne serait pas étonnant qu'au cours de certaines manipulations, on se retrouve avec un nombre à plein de décimales. Par exemple, une division par 1.2 ou autre ...
    Bien entendu, mais ça ne change rien au fait que pour les millisecondes, ce sera 3 chiffres, et on se fout du reste.
    C'est pour ça que j'avais réagi.

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

Discussions similaires

  1. libpqxx posgres le type double et l'affichage ?
    Par panthere noire dans le forum Débuter
    Réponses: 0
    Dernier message: 04/03/2012, 14h01
  2. [Socket] Send/Recv type double sur architectures différentes
    Par nicolas.pied dans le forum Réseau
    Réponses: 4
    Dernier message: 31/03/2006, 20h33
  3. Variable de type double
    Par Linaa dans le forum C
    Réponses: 16
    Dernier message: 21/01/2006, 13h04
  4. arrondi avec type double
    Par la drogue c'est mal dans le forum MFC
    Réponses: 6
    Dernier message: 08/04/2005, 17h51
  5. [LG]Convertir le type double en string
    Par @tom@ dans le forum Langage
    Réponses: 8
    Dernier message: 18/01/2004, 19h20

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