У меня есть таблица раз я вошел в Excel. Расчеты добавили часть моего поля, поэтому 0:13:13 на самом деле 0:13:13:1282

Как я могу получить точное время без миллисекунд?

3 ответа3

1

Это может быть связано с тем, что Excel хранит метки времени как «даты автоматизации OLE».

Из .NET DateTime.ToOADate документация:

Дата автоматизации OLE реализована в виде числа с плавающей запятой, неотъемлемым компонентом которого является число дней до или после полуночи 30 декабря 1899 года, а дробный компонент представляет время этого дня, деленное на 24. Например, полночь 31 декабря 1899 года представлена 1,0; 6 часов утра 1 января 1900 года представлено 2,25; полночь 29 декабря 1899 года представлена -1,0; и 6 часов утра 29 декабря 1899 года обозначено -1,25.

Базовая дата автоматизации OLE - полночь, 30 декабря 1899 года. Минимальная дата OLE-автоматизации - полночь, 1 января 0100 года. Максимальная дата автоматизации OLE совпадает с датой DateTime.MaxValue , последний момент 31 декабря 9999 года.

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

Один день имеет в общей сложности 24 * 60 * 60 = 86400 секунд.

(13 * 60 + 13) / 86400 = 0,00917824074074

(13 * 60 + 13 + 0,1282) / 86400 = 0,00917972453704

Как видите, цифры очень похожи и отличаются только начиная с шестого знака после запятой.

1

Попробуйте обернуть свои вычисления в функцию MROUND чтобы округлить до ближайшей секунды, например

=MROUND(your_calc,"0:00:01")

или вы могли бы округлить с функцией FLOOR аналогичным образом

=FLOOR(your_calc,"0:00:01")

0

Чтобы просто отбросить часть миллисекунд, в B1 введите:

=TIMEVALUE(LEFT(A1,LEN(A1)-5))

и применить формат времени к B1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .