Разные результаты в Excel и Libre для одного файла!?

Автор Hasim, 4 мая 2012, 11:40

0 Пользователи и 1 гость просматривают эту тему.

Yakov

Цитата: ape от  4 мая 2012, 19:01о Calc в 3-м случае поменял дату, добавив 4 года. -?
В Excel есть аналогичный переключатель (дата как в Windows|дата как в Macintosh)
и при переключении там тоже происходит смещение.

Hasim

Цитата: JohnSUN от  4 мая 2012, 20:56
То есть, ты считаешь, что твой пример построен абсолютно правильно? И будет хорошо работать для любых исходных данных? Даже если ввести в A4, например, значение "11.01.2012 03:49:08"?
Этого я не знаю. Я даже не знаю, что значит "абсолютно правильно". Я знаю только, что в моем примере Excel работает проще и лучше, чем Calc. По крайней мере можно использовать даже "необычный" формат. Это мне понравилось в Excel. И вопрос-то был о совместимости. Файл xls должен отображаться одинаково в Excel и Calc.

JohnSUN

Вычисления с датами-временем тема вообще очень сложная.
Мне очень нравится этот фокус:
A1: 07.02.2012 15:17
B1: 05.02.2012 3:15
C1: 60:02:00 (=A1-B1)
D1: 0,10 (=C1/24)
Таким образом имеем 60/24=0,1. Классная арифметика?

А насчет
Цитата: Hasim от  4 мая 2012, 21:20И вопрос-то был о совместимости. Файл xls должен отображаться одинаково в Excel и Calc.
Полностью согласен! Должен! Просто обязан! Иначе что же это за дрянь такая - свободный офис? Вот на моей картинке, например, какого рожна LiO пишет какие-то 27.12.1899? Ведь в этой ячейке для полной совместимости должны быть нарисованы красивенькие решеточки...

Цитата: Hasim от  4 мая 2012, 21:20Я знаю только, что в моем примере Excel работает проще и лучше, чем Calc. По крайней мере можно использовать даже "необычный" формат. Это мне понравилось в Excel.
Это я тоже должен прокомментировать? Или "спустим на тормозах"?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Hasim

Цитата: JohnSUN от  4 мая 2012, 20:59Мне очень нравится этот фокус:
Нет там никакого фокуса. Если всё делать правильно в Excel.

[вложение удалено Администратором]

ape

Exel-2010: файл и скрин прилагаю (aвтор *.xls - LibCalc-3.5.3).

[вложение удалено Администратором]

JohnSUN

Excel-2003 дает тот же результат. LiO отображает какую-то ахинею, то ли 23 дня, то ли 25. Но это, я думаю, не его вина.
Реальный смысл ячейки D3 - "интервал времени в ячейке C2 (двое с половиной суток) меньше на 6,65773 суток, чем интервал времени в ячейке C4 (почти десять суток)".
А "23:08:12:52" или "#####" здесь совершенно ни к чему...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

ape

#21
"23", "25" - это опять из-за настроек (см. "да уж.png"). Здесь другое: после вычисления разницы дат Exel отказывается выводить отрицательные значения натурального числа лет, а Calc суммирует отрицательное число с дефолтной (точнее - "нулевой") датой. Как мне кажется, ни тот, ни другой не реализуют функцию так, как она задумывалась изначально:
     "Дата(1)" - "Дата(2)" = -лет.мес.дн.:час.:мин.:сек.,
при этом Exel не имеет младшего разряда - секунд.
Вариант ODS v.1.0 для Exel-2010 или Exel-2002,-3,-7 с ODF-конвертером для Microsoft Office прилагаю. Ссылку на расширение дам позже в "P.S." этого сообщения.
--------------
P.S. Страница загрузки:
http://odf-converter.sourceforge.net/download.html


[вложение удалено Администратором]

JohnSUN

#22
Цитата: ape от  5 мая 2012, 12:09"23", "25" - это опять из-за настроек
Ну да, это или 23 декабря 1899 или 25 декабря 1903 года - в зависимости от "базовой даты". Ни то, ни другое к результату формулы отношения не имеют.

Цитата: ape от  5 мая 2012, 12:09Как мне кажется, ни тот, ни другой не реализуют функцию так, как она задумывалась изначально:
     "Дата(1)" - "Дата(2)" = -лет.мес.дн.:час.:мин.:сек.,
при этом Exel не имеет младшего разряда - секунд.
Поправка: секунды отобразить можно. Просто творцы Экселя учли, что обычному человеку все эти цифры не нужны одновременно - если человек интересуется годом-месяцем, то ему не интересны секунды (лишняя точность), а если пользователь хочет увидеть время с точностью до секунд или даже до десятых долей секунды, то ему обычно наплевать на номер столетия. Поэтому в перечень стандартных форматов длинная громоздкая конструкция вида "ДД.ММ.ГГГГ чч:мм:сс,0" и не включена. Но её вполне можно задать вручную - в секции "(все форматы)" доступно редактирование форматной строки.

Предлагаю все-таки, перед тем как продолжить ковыряние в этой теме, проговорить вслух задачу - что собственно хочется получить в результате и для чего это надо? В смысле, для каких реальных задач такие вычисления могут понадобиться, какие люди (уровень подготовленности) будут считывать эти значения и какие решения на основании увиденного они должны принимать.

В теме с раскрашиванием дат, которая здесь недавно обсуждалась, было предложено несколько более-менее приемлемых вариантов решения. Тот же топикстартер предложил неплохую формулу для форматирования результата таких вычислений. Почему он от нее отказался и попытался форматировать результат с помощью Григорианского календарая - отдельный вопрос, ответ на который меня, честно говоря, совсем не интересует.

PS. Только что наткнулся, кажется, как раз в тему  ;D
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Hasim

Цитата: JohnSUN от  5 мая 2012, 11:55Тот же топикстартер предложил неплохую формулу для форматирования результата таких вычислений. Почему он от нее отказался
В той формуле были текстовые данные. Арифметические операции к ним так просто не применить. Использование форматов даты и времени позволяет просто использовать арифметические операции для вычислений.

Чтобы продолжать "ковыряние в этой теме", думаю, что надо разобраться с таким вопросом:
почему существуют два типа похожих форматов: формат "Дата" и формат "Время", чем они отличаются, чем связаны, и, вообще, в чем смысл существования их обоих вместе?

JohnSUN

Цитата: Hasim от  5 мая 2012, 13:29В той формуле были текстовые данные. Арифметические операции к ним так просто не применить.
А разве я сказал не то же самое?
Цитата: Hasim от  5 мая 2012, 13:29Использование форматов даты и времени позволяет просто использовать арифметические операции для вычислений.
Ну, не совсем так. "Использование форматов" позволяет только отобразить результат каких-то вычислений в нужном виде. Каких вычислений? Вот это я и хотел узнать - каких именно вычислений? Отработанное время умножить на почасовую ставку? Рассчитать сложный процент на остаток вклада? Вычислить амортизацию для оборудования, которое проработало определенное время? Любая из этих операций требует только одного вычитания - <дата окончания периода> - <дата начала периода>. В примере, с которого началась эта тема, применяется еще одно вычитание, из интервала вычитается интервал. В каких случаях эта операция может понадобиться?
Цитата: Hasim от  5 мая 2012, 13:29почему существуют два типа похожих форматов: формат "Дата" и формат "Время", чем они отличаются, чем связаны, и, вообще, в чем смысл существования их обоих вместе?
Ну, похожи они только тем, что каждый из них состоит из трех составляющих: дата это три числа год-месяц-день, время это тоже три числа - часы-минуты-секунды. Отличаются разделителями: составные части даты могут разделяться косой чертой, тире или точкой, а составные части времени всегда разделяются двоеточием. Кроме того, порядок составных частей даты может произвольно меняться в зависимости от национальных традиций: год-месяц-день, месяц/день/год, день.месяц.год и так далее. А порядок составных частей времени всегда (насколько я знаю) остается постоянным часы:минуты:секунды и, может быть, через десятичный разделитель доли секунд.
А насчет "смысла существования их обоих вместе"... Есть в этом мире такие устройства как часы, время дня показывают. А есть календари, чтобы узнавать какая пора года на дворе, сколько дней до Дня программиста осталось, какой день недели сегодня - не понедельник ли случайно? А кроме того есть еще такие забавные устройства - часы с календарем... Наверное, раз это всё существует, то смысл какой-то есть?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Hasim

Объяснение красивое, но, увы, не соответствующее действительности.

[вложение удалено Администратором]

JohnSUN

Оу... Миль пардон... В первоначальном вопросе речь шла о форматах, а, оказывается, имелось в виду "почему существует две категории форматов"? И почему часть форматов "пересекается", упоминается в каждой из категорий?
Ну, это тоже не сложно. Просто для удобства.
Для ясности можно заглянуть в другие категории и просто сосчитать сколько форматов в каждой из них содержится. Списки для каждого из них (за исключением Денежного формата) настолько короткие, что умещаются в поле полностью. А способов отображения даты, времени и даты-времени очень много. Поэтому они и сгруппированы по смыслу. Чтобы пользователь, перед прокручиванием длиннющего списка в поисках нужного формата, мог хотя бы немного его сократить, "отфильтровать" по смыслу. Ну, чтобы не так много строк проматывать туда-сюда.
А пересекаются именно из-за того, что некоторые из стандартных форматов могут в равной мере относиться к любой из этих категорий. Например, формат "дата с указанием времени с точностью до минут", и формат "время с точностью до минут с указанием даты" обозначаются одной и той же форматной строкой "DD.MM.YY HH:MM". В какую из категорий нужно было бы поместить этот формат?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

JohnSUN

Знаешь, ape, долго не мог понять, что мне не понравилось в этой формулировке:
Цитата: ape от  5 мая 2012, 12:09"Дата(1)" - "Дата(2)" = -лет.мес.дн.:час.:мин.:сек.
Понял! Меня смутило присутствие "мес." в результате вычислений. Каких именно "мес."? Февралей по 28 дней или Августов по 31 дню? К "лет." есть похожий вопрос - по сколько дней в году считать? Но с годами как-то проще: раз в формуле участвуют две даты, то YEARS() от этих исходных дат должен вернуть правильное число лет (последний параметр в этой функции показывает как считать годы).
Я бы все-таки ограничился для временных интервалов вариантом форматирования [-]ДДД" дн. "ЧЧ:ММ:СС
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Hasim

Цитата: JohnSUN от  5 мая 2012, 14:46Меня смутило присутствие "мес." в результате вычислений.
Это не должно никого смущать, поскольку используется очень часто.
Например, стаж работы - 4 года 5 месяцев 10 дней, очень распространенная формулировка.
Или, к этому же, ежемесячный оклад -60000 руб., тоже никого не смущает, хотя в феврале и январе число дней различно.

JohnSUN

#29
При подсчете стажа используется более сложные вычисления, чем обычная разность дат. Это больше похоже на то, как кассир отсчитывает сдачу: сначала очень крупные купюры (в данном случае - года), далее более мелкие (месяцы, от указанного числа до этого же числа следующего месяца) и наконец мелочь (дни). Результат сильно зависит от дат отсчета - стартовой и конечной.
Интервал времени как разность дат - это уже конечная величина, в которой нет никакой информации о первоначальных датах. Поэтому форматированием или другими хитростями точно преобразовать его в лет-месяцев не представляется возможным.
А человеку с ежемесячным окладом "минус шестьдесят тысяч руб." можно только посочувствовать  :D
А если серьёзно, то пересчет ежемесячных окладов в количество реально отработанных дней и, соответственно, в начисленную зарплату тоже задача не из простых. Чтобы в этом убедиться, достаточно просто оценить длину любой инструкции по начислению больничных или отпускных.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне