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

Free Pascal Discussion :

Calcul de durée


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 20
    Par défaut Calcul de durée
    Bonjour,

    Je travaille sous Lazarus 1.6, et je teste les fonctions de gestion des dates des heures en créant un programme qui calcule des durées. En faisant quelques essais, je tombe sur une petite erreur que je n'arrive pas à corriger.

    Ce n'est pas bien grave, mais c'est par curiosité :

    Je pose une date/heure, Date1, à laquelle j'ajoute quelques minutes (5 par exemple) pour obtenir une seconde date, Date2. Ensuite j'utilise la fonction MinutesBetween pour récupérer la durée entre les 2 dates et ça me renvoie 4 au lieu de 5. Si j'utilise la fonction MinuteSpan, j'ai effectivement une valeur proche de 5 (4.9999999953433871), mais qui n'est pas 5.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    program Test;
    uses
      sysUtils, DateUtils;
    var
      Date1, Date2: TDateTime;
    begin
      Date1:=now();
      Date2:=IncMinute(Date1, 5);
      writeln(MinutesBetween(Date1, Date2));
      writeln(MinuteSpan(Date1, Date2));
      readln();
    end.
    Est-il possible de corriger cette légère approximation ? A quoi est-elle due ?

    Merci de vos éclairages.

  2. #2
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Bonjour,

    Citation Envoyé par Thierry65 Voir le message
    Si j'utilise la fonction MinuteSpan, j'ai effectivement une valeur proche de 5 (4.9999999953433871), mais qui n'est pas 5.
    Pour ce qui est du résultat avec MinuteSpan, j'attribuerais volontiers l'erreur à une difficulté à représenter des nombres entiers avec des flottants. C'est un problème récurrent d'arrondi qui fait qu'on obtient parfois (dans tous les langages de programmation) des résultats étranges dès qu'on approche certaines valeurs. MinuteSpan renvoie le nombre de minutes entre deux temps, y compris une éventuelle part fractionnelle. Le plus simple dans ces cas où les valeurs approchent la valeur entière escomptée est d'utiliser la fonction Round.
    On en revient d'ailleurs à la difficulté rencontrée avec MinutesBetween qui renvoie le nombre de minutes entières séparant deux dates : or, 4.9999999953433871 a pour partie entière 4 !
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/12/2006, 17h43
  2. [MySQL] Aide pour calculer une durée
    Par Sandara dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/06/2006, 17h00
  3. Calculer la duree d'un MP3
    Par k-koo dans le forum C
    Réponses: 4
    Dernier message: 16/03/2006, 21h01
  4. [Date] Fonction de calcul de durée entre 2 dates
    Par jesus144 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/01/2006, 16h36
  5. Calculer une duree entre 2 dates
    Par d.w.d dans le forum C++
    Réponses: 7
    Dernier message: 02/03/2005, 22h39

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