- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
// See where we currently are in a calendar quarter.
// In Java, JANUARY == 0.
// Yes, I could just write (3 - currentMonth % 3),
// but this is clearer
switch (currentMonth % 3) {
case 0: // January, April, July, October
monthsToInclude = 3; // include whole last quarter
break;
case 1: // February, May, August, November
monthsToInclude = 2; // include first two months of this quarter
break;
default: // March, June, September, December
monthsToInclude = 1; // include first month of this quarter
break;
}
Или всё-таки наплевать на читаемость и заменить короткой версией?
monthsToInclude = val == 0 ? 3 : val == 1 ? 1 : 2 :D
Или составить массив с параметрами месяцев раз и навсегда?
По мне мутное условие к которому надо читать комментарии...
facepalm.gif
Yes, I could just write normal branchless code, but this is crappier.
Я как-то раз такое написал: http://govnokod.ru/8624 и то меня заминусовали.
Может быть стоит переписать так?
select datepart(weekday,getDate())+6) % 7 + 1
(5+6) % 7=4+1=5
А у меня 4.
7-(8-5) % 7=7-3=4
Ну да.
>Мой код еще более бажный
У меня-то код работает без багов. Просто сильно закрученный.
(5+5) % 7 + 1 = 3+1 = 4
(1+5) % 7 + 1 = 6+1 = 7
Ну а так согласен: "работает - не трогай".
Но вообще я потом выкинул то говно и нагуглил как в БД поменять день начала недели.
А вдруг на этом был основан какой-либо код?
Option Monday 1
Option January 1
В квартале 3 месяца.
Для начала находим сколько полных месяцев прошло от начала текущего квартала: currentMonth % 3
И затем вычитаем это количество из трех - столько (возможно неполных) месяцев и осталось до конца квартала.
P.S. Предлагаю над строкой 3 - currentMonth % 3 написать комментарий, в духе "определим, сколько месяцев осталось до конца текущего квартала".
Хм. Тогда сорри.
Формула будет вот такая: 1 + (currentMonth+2) % 3. Но она мне не нравится.
Можно еще так:
>1 + (currentMonth+2) % 3 Но она мне не нравится.
Такое же получилось. Мне тоже не нравится. Вариант с явной проверкой на ноль лучче. Но надо завести функцию - ifZero(x,y)
А вторая функция будет такой:
ifZero( (num + k) % n,n)