Главная страница «Первого сентября»Главная страница журнала «Информатика»Содержание №21/2008


В мир информатики
Microsoft Excel углубленно

Ошибка високосного года в Microsoft Excel

В статьях [1–2] указывалось, что не всякий год, порядковый номер которого кратен четырем, является високосным — годы, номера которых кратны 100, являются високосными только при условии, что их значения кратны 400. Поэтому 2000 год являлся високосным, а 1900 год — нет, и в нем было 365 дней, как у “обычного” года, а не 366 (в феврале — 28 дней, а не 29). Однако программа Microsoft Excel воспринимает 1900-й как високосный! Если ввести в ячейку дату 29.02.1900, то Excel распознает такое значение как дату и, как обычно, выровняет его в ячейке по правому краю. Если же ввести другую недопустимую дату, например, 29.02.1901, то Excel воспримет введенное значение как текстовую строку (выравнивание текста в ячейке по умолчанию происходит по левому краю).

Возникает вопрос: как программный продукт, который ежедневно используют миллионы людей во всем мире, может содержать такую ошибку? Ответ кроется в истории его создания. Исходная версия электронной таблицы Lotus 1-2-3, на которой базировалась программа Excel, содержала дефект, по причине которого 1900 год рассматривался как високосный. Разработчики Excel знали об этой ошибке и позднее, при выпуске приложения, специально перенесли этот дефект в новую программу, чтобы обеспечить его совместимость с рабочими листами файлов Lotus.

Но почему же эта ошибка существует в более поздних версиях Excel? Компания Microsoft утверждает, что недостатки, которые могут возникнуть при исправлении этой ошибки, значительно перевешивают преимущества. Если бы существующая ошибка была устранена, это привело бы в беспорядок сотни тысяч существующих рабочих книг. Кроме того, исправление этой проблемы сказалось бы на совместимости самого приложения Excel с другими программами, использующими данные типа “дата”. Именно поэтому в действительности эта ошибка влечет не так уж много проблем, как ее исправление. К тому же большинство пользователей не использует даты ранее 1 марта 1900 года.

Литература

1. Високосные годы. / “В мир информатики” № 17 (“Информатика” № 5/2004).

2. Как узнать номер дня недели? / “В мир информатики” № 114 (“Информатика” № 20/2008).

TopList