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

Langage Delphi Discussion :

arrondir le temps (heure, minute, seconde) ?


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut arrondir le temps (heure, minute, seconde) ?
    Salut à tous, je me trouve stupide, je n'y arrive pas, j'ai fait plein de test different et ma solution ne fonctionne jamais ....

    Explication : je souhaite ecrire un bout de code qui me donne réponse à un algorithme indispensable à mon application metier :

    t est le temps d'essai en minutes que j'obtiens par un calcul d'algorithme ...etc --> qui ne nous interesse pas ici et qui fonctionne c'est déjà ça !

    Je dois l'arrondir le résultat à la demi-minute la plus proche lorsque t < 5 min et à la minute la plus proche lorsque t > 5 min.

    avec des roundto, des trunc ... div ... etc. j'arrive à rien, ça ne marche pas je dois avoir une petite faiblesse algorithmique AIDEZZZZ moi svp ! en même temps c'est un bon exercice je trouve pour ceux qui sont prof d'info

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 563
    Points : 25 165
    Points
    25 165
    Par défaut
    Utilise DecodeDateTime qui va extraire décomposé ton TDateTime en Heure, Minute ... puisque ensuite tu pourras faire des calculs bcp plus simple et moins approximatif que sur le TDateTime

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    je n'utilise aucun de ces composants, je génére juste après un calcul spécial une valeur stocké dans une variable t.

    Cette variable par exemple prend suite à mon calcule la valeur t:= 3.8473 (minutes) on se trouve dans le cas ou t <= 5 donc je dois arondir t pour qu'elle soit la plus proche de la demi minutes superieur ou inférieure à 3.8473.

    3.8473 c'est donc 3mn et 0.8473*60= 50,28 secondes
    Arrondi à la demi-minutes la plus proche, mon resultat est 4mn

    Comment faire ça en algorithme ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    vous en pensez quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if trunc(t*60) <= 300 then begin //dans le cas ou t <= 5mn
    if trunc(t*60) - trunc(t)*60 > 45 then t:= trunc(t) + 1
    else if trunc(t*60) - trunc(t)*60 > 30 then t:= trunc(t) + 0.5
    else if trunc(t*60) - trunc(t)*60 > 15 then t:= trunc(t) + 0.5
    else then t:= trunc(t);
    end else
    begin
    // partie pour si supperieur à 5mn
    end;

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 730
    Points : 5 388
    Points
    5 388
    Par défaut
    DecodeDateTime n'est pas un composant mais une procedure déjà implémentée dans Delphi.

    La touche F1 ne semble pas fonctionner chez toi ! Regarde l'aide de Delphi à ce sujet et en particulier les routines de gestion des dates / heures

  6. #6
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    popo et Shai > Je ne pense pas que ce soit ce qu'il cherche ... Il est inutile dans son cas d'avoir recours a DecodeTime et compagnie ...

    Voila mon idée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function ArrondiMinute (Min : Real) : Real;
    begin
      if Min<5 then Result:=SimpleRoundTo(Min*2,1)/2    //Comme ca arrondit a l'unité, je multiplie puis je divise par 2 ...
               else Result:=SimpleRoundTo(Min,1);
    end;
    Bonne chance

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par mick605 Voir le message
    Salut

    popo et Shai > Je ne pense pas que ce soit ce qu'il cherche ... Il est inutile dans son cas d'avoir recours a DecodeTime et compagnie ...

    Voila mon idée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function ArrondiMinute (Min : Real) : Real;
    begin
      if Min<5 then Result:=SimpleRoundTo(Min*2,1)/2    //Comme ca arrondit a l'unité, je multiplie puis je divise par 2 ...
               else Result:=SimpleRoundTo(Min,1);
    end;
    Bonne chance
    +1

    moi qui fais beaucoup plus de programmation sur petit système embraque c'est ce que j'allai proposer.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/09/2010, 11h33
  2. Réponses: 12
    Dernier message: 03/01/2007, 13h55
  3. [HIBERNATE] date sans heure minute seconde
    Par _juel_ dans le forum Hibernate
    Réponses: 1
    Dernier message: 30/06/2006, 14h43
  4. Réponses: 1
    Dernier message: 01/06/2006, 23h12
  5. Formater une durée sous la forme Heure:Minute:Seconde
    Par marsupile dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/01/2004, 23h29

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