У меня есть таблица раз я вошел в Excel. Расчеты добавили часть моего поля, поэтому 0:13:13 на самом деле 0:13:13:1282
Как я могу получить точное время без миллисекунд?
У меня есть таблица раз я вошел в Excel. Расчеты добавили часть моего поля, поэтому 0:13:13 на самом деле 0:13:13:1282
Как я могу получить точное время без миллисекунд?
Это может быть связано с тем, что 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
Как видите, цифры очень похожи и отличаются только начиная с шестого знака после запятой.
Попробуйте обернуть свои вычисления в функцию MROUND
чтобы округлить до ближайшей секунды, например
=MROUND(your_calc,"0:00:01")
или вы могли бы округлить с функцией FLOOR
аналогичным образом
=FLOOR(your_calc,"0:00:01")
Чтобы просто отбросить часть миллисекунд, в B1 введите:
=TIMEVALUE(LEFT(A1,LEN(A1)-5))
и применить формат времени к B1