2013-02-24 1 views
0

В следующем коде используется Matlabs Serial Date Number в качестве ключа в карте контейнера Matlabs. Тип ключа двойной. Это верно? Может ли Matlabs Serial Date Number использоваться в качестве ключа?Matlab container.map поведение странного ключа с SerialDateNumber

currDateTime='2013-02-12 11:00'; 
    dateNum=datenum(currDateTime); 
    keySet = {dateNum}; 
    currentDateNum=datestr(dateNum); 
    valueSet = {currentDateNum} ; 



    weatherFrontMap = containers.Map(keySet,valueSet); 

    weatherFrontMap(dateNum)='eleven'; 
    currDateTime='2013-02-12 12:00'; 
    dateNum=datenum(currDateTime); 
    weatherFrontMap(dateNum)='twelve'; 
    currDateTime='2013-02-12 13:00'; 
    dateNum=datenum(currDateTime); 
    weatherFrontMap(dateNum)='thirteen'; 


    currentDateNum=datestr(dateNum); 
    disp (currentDateNum) 
    str=weatherFrontMap(dateNum); 
    disp(str) 


    subtractHour=addtodate(dateNum,-1,'hour'); 
    currentDateNum=datestr(subtractHour); 
    disp (currentDateNum) 

    strSubtractHour=weatherFrontMap(subtractHour); 
    disp(strSubtractHour) 


    subtractHour2=addtodate(dateNum,-2,'hour'); 
     currentDateNum=datestr(subtractHour2); 
    disp (currentDateNum) 

    strSubtractHour2=weatherFrontMap(subtractHour2); 
    disp(strSubtractHour2) 

Печатается:

12-февраля-2013 13:00:00

тринадцать

12-февраля-2013 12:00:00

двенадцать

12-фев-2013 11:00:00

Ошибка при использовании контейнеров.Map/subsref

Указанный ключ отсутствует в этом контейнере.

Ошибка в testMap (строка 40)

strSubtractHour2 = weatherFrontMap (subtractHour2);

ответ

1

Номера с плавающей запятой не подходят для контейнера карты, так как тестирование равенства по числам с плавающей точкой является рискованным (из-за неточности хранения чисел с плавающей запятой).

Этот код будет работать лучше, если вы использовали строковое представление даты/времени, где вы можете контролировать точность.

+0

Спасибо, строковое представление отлично работает –

Смежные вопросы