Matlab containers.map使用SerialDateNumber进行奇怪的键行为

时间:2013-02-24 21:26:24

标签: matlab datetime map key containers

以下代码使用Matlabs序列日期编号作为matlabs容器图中的键。关键类型是双倍。它是否正确? Matlabs序列号可以用作密钥吗?

    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-Feb-2013 13:00:00

13

12-Feb-2013 12:00:00

12

12-Feb-2013 11:00:00

使用containers.Map/subsref

时出错

此容器中不存在指定的密钥。

testMap中的错误(第40行)

strSubtractHour2 = weatherFrontMap(subtractHour2);

1 个答案:

答案 0 :(得分:1)

浮点数不适合地图容器,因为使用浮点数测试相等是有风险的(由于浮点数的存储不精确)。

如果您使用可以控制精度的日期/时间的字符串表示,则此代码可以更好地工作。