2017-04-19 1 views
0

Je rencontre des problèmes dans Matlab concernant les erreurs d'arrondi avec les variables typées datetime.Comment puis-je arrêter les décimales d'arrondi de Matlab lors de la soustraction de variables 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'essaie de faire t(2)-t(1), tout ce que j'obtiens est une réponse de type 'durée' de 00:00:00.

Je voudrais trouver la différence entre ces temps et garder la précision! Toute aide, ou les directions à des liens qui s'adressent directement à un problème comme celui-ci serait appréciée! Je ne suis pas si familier avec l'utilisation de datetime & les variables typées de durée dans Matlab!

Informations supplémentaires: Je Matlab R2017a

Edit: Je Format Long; écrit dans mon script.

+0

Avez-vous essayé la commande 'format long'? – qbzenker

+0

Salut! Oui, j'aurais dû le mentionner! Je l'ai écrit dans la deuxième ligne de mon script avant que quelque chose n'arrive. – Aheijna

+0

Modifiez la propriété ['Format'] (https://www.mathworks.com/help/matlab/ref/duration.html#inputarg_displayFormat) de votre objet de durée. – excaza

Répondre

1

de précision n'est pas perdu, il vous suffit de changer le display format.

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 fractions. 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 comme milliseconds ou seconds retourner double tableaux:

>> seconds(A) 

ans = 

    0.0013 

>> milliseconds(A) 

ans = 

    1.2500 
+0

Ah, encore mieux - merci! – Aheijna

0

Cela devrait fonctionner si seulement quelques secondes varient dans les deux dates

second(t(1))-second(t(2)) 
+0

Brillant, juste ce dont j'avais besoin! Merci! – Aheijna

1

L'objet de durée a effectivement la précision appropriée. Il ne l'affiche pas à moins que vous définissiez le format.

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

Si vous définissez 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