J'ai quelques problèmes dans Matlab à voir avec des erreurs d'arrondi avec des variables typées datetime.

J'ai un tableau, appelons-le 't', et il est de type datetime. Dites, par exemple, t(2) = 00:01:35.6889999 et t(1) = 00:01:35.3549042.

Si j'essaye de faire t(2)-t(1), tout ce que j'obtiens est une réponse de type "durée" de 00:00:00.

J'aimerais trouver la différence entre ces temps et garder la précision! Toute aide ou direction vers des liens qui traitent / se rapportent directement à un problème comme celui-ci serait appréciée! Je ne suis pas très familier avec l'utilisation des variables typées datetime et duration dans Matlab!

Infos supplémentaires: j'utilise Matlab R2017a

Edit: J'ai Format Long; écrit dans mon script.

1
Aheijna 19 avril 2017 à 22:31

3 réponses

Meilleure réponse

La précision n'est pas perdue, il vous suffit de changer le format d'affichage.

Le format d'affichage par défaut est HH:MM:SS:

>> A = duration(0, 0, 0, 1.25) % 1.25 MS

A = 

  duration

   00:00:00

Vous pouvez modifier le format pour afficher les parties fractionnaires. Par exemple:

>> A.Format = 's'  % Seconds only

A = 

  duration

   0.00125 sec

>> A.Format = 'hh:mm:ss.SSSSSSSS'  % HMS, up to 9 fractional second digits

A = 

  duration

   00:00:00.00125000

Vous pouvez également utiliser des fonctions d'assistance telles que milliseconds ou < a href = "https://www.mathworks.com/help/robotics/ref/seconds.html" rel = "nofollow noreferrer"> seconds pour renvoyer des tableaux double:

>> seconds(A)

ans =

    0.0013

>> milliseconds(A)

ans =

    1.2500
1
excaza 19 avril 2017 à 19:41

Cela devrait fonctionner si seules les secondes varient entre les deux dates

second(t(1))-second(t(2))
1
Nirvedh Meshram 19 avril 2017 à 19:38

L'objet duration a en fait la précision appropriée. Il ne l'affiche que si vous définissez le format.

>> dur = duration(t(2) - t(1), 'Format', 's')
dur = 
  duration
   0.3341 sec

Que vous définissiez le format ou non, vous pouvez saisir les secondes directement à partir de l'objet de durée.

>> format long
>> seconds(dur)
ans =
   0.334095700000000
>> seconds(t(2) - t(1))
ans =
   0.334095700000000
1
msitt 19 avril 2017 à 19:46