Преобразование тенора строки в год

#kdb

#kdb

Вопрос:

У меня есть следующие теноры в строке (преобразованные в символы ниже), полученные из кривой подкачки:

tenors_str : `1d`6m`1y`1y6m`2y`2y6m`3y`3y6m`4y`4y6m`5y`10y`20y`30y6m

Я хотел бы создать функцию для анализа этих теноров и получения соответствующего времени в годах.

Например:

  • 1d должно быть 1/365.25
  • 6m должно быть 0,5
  • 1y должно быть 1.0
  • 1y6m должно быть 1.5
  • 10y должно быть 10.0

Я начал с создания такого словаря:

tenor_to_year:`d`m`y!(165.25;1;1f);

Но тогда я не могу справиться со случаем, когда символу предшествует более 1 цифры d , m или y

Ответ №1:

Я думаю, что этот подход охватывает ваши варианты использования:

 f:{sum prd each 2 cut d[`$c]^"F"$c:cut[0,where b|prev b:x in raze string key d:tenor_to_year;x]};

q)f each string tenors_str
0.002737851 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 10 20 30.5