В большинстве современных сред программирования, даты хранятся как вещественные числа. Целая часть числа есть количество дней, прошедших с определенной выбранной даты в прошлом, которая называется «эпоха».В Excel дата 16 июня 2006 г. хранится как 38884, считая дни от даты 1 января 1900 г., которая принята за 1.Я принялся экспериментировать с различными функциями даты и времени в Basic и Excel, проверяя то и это, и заметил кое-что странное в документации на Visual Basic: в качестве начальной даты в Basic использовалась 31 декабря 1899 г, вместо 1 января 1900г., но почему-то сегодняшняя дата в Excel и Basic была одинаковой.
Я разыскал разработчика Excel, который был достаточно стар, чтобы помнить, почему это так.Эд Фраез вроде знал ответ.«Ох» - сказал он мне. «Проверь 28 февраля 1900 г.»
«59» - сказал я.
«А теперь 1 марта»
«61 !»
«А куда делось 60?» - спросил Эд.
«29 февраля 1900. 1900 год был високосным! он делится на 4!»
«Догадка хорошая, но неправильная» - сказал Эд и подержал меня в недоумении некоторое время.Опа! Я кое-что выяснил. Года, которые делятся на 100 не високосные, если они не делятся еще и на 400.
1900 не был високосным.«Это же баг в Excel!» - воскликнул я.
«На самом деле не совсем» сказал Эд. «Нам пришлось сделать так, чтобы можно было импортировать книги 123».
«Значит, это баг в Lotus 123?»
«Да, но возможно преднамеренный. Lotus надо было уместить в 640Кб памяти. Это немного. За исключением 1900, можно определить является ли год високосным, просто проверив, равны ли нулю младшие два бита. Это легко и быстро. Ребята в Lotus, вероятно, решили, что не стоит беспокоиться, что два месяца в прошлом ошибочны. Похоже, что парни, разрабатывавшие Basic, не захотели иметь геморрой из-за этих двух месяцев, поэтому они сместили начальную дату на один день назад».«Ага!» сказал я, и, уходя, понимал, зачем нужен был эта галочка в опциях под названием «система дат 1904».Следующий день был бы днем отчетов у большого Билла...Автор: Джоэл Спольски
Переводчик: Сазонов Денис
В оригинале статья называлась My First BillG Review, опубликована 16 июня 2006 г.
В топике приведен лишь небольшой заманчивый отрывок статьи. Полный тест можно прочесть здесь. P.S. Ошибки отображения Excel 0722 сентября 2007 года было сообщено, что в определённых ситуациях Excel 2007 будет показывать неправильные результаты. В частности, для тех пар чисел, чье произведение равно 65535 (например, 850 и 77,1), Excel отобразит в качестве итога 100000. Это происходит с примерно 14,5 % таких пар. Кроме того, если к результату добавить единицу, Excel выведет итог 100001. Однако, если вычесть из итога единицу, на дисплее отобразится правильный результат 65534. (Также, если итог умножить или разделить на 2, будут отображены 131070 и 32767,5 соответственно).Microsoft сообщила в блоге Microsoft Excel, что проблема существует в отображении шести конкретных значений с плавающей запятой между 65534,99999999995 и 65535 и шести значений между 65535,99999999995 и 65536 (не включая границ). Любые расчеты, результат которых равен одному из двенадцати значений, будут отображаться неправильно. Фактические данные, хранящиеся и передающиеся в другие ячейки, верны, неверно лишь отображение значения. Ошибка появилась в Excel 2007 и не существует в предыдущих версиях. 9 октября 2007 года Microsoft выпустила патч, исправляющий проблему. Он вошёл и в состав исправлений Service Pack 1.
Комментарии