Как записать в float тисячние,при записи JD= 2451545,25
- Войдите на сайт для отправки комментариев
Ср, 29/11/2017 - 13:54
При записи Юлианского времени недостает точности после запятой идут часы ,минуты,секунды.Нужно чтобы после запятой било ещё 5 чисел.
Так как float даёт только два знака после запятой Пробовал умножать на 10,100 но возникает другая проблема float не может сохранить такой длины значения.
Кто Вам сказал такую глупость? По стандарту IEEE 754-2008, тип float (число с одинарной точностью) гарантированно обеспечивает 7 знаков мантиссы.
Так у ТС мантисса содержит уже 9 знаков.
Так у ТС мантисса содержит уже 9 знаков.
Да, это-то я вижу, но это не делает выражение "float даёт только два знака после запятой" менее бредовым.
это не делает выражение "float даёт только два знака после запятой" менее бредовым.
С бредовостью согласен, но ТС (как обычно) не объяснил зачем он придумал "часы, минуты, секунды после зарятой".
Не смотрел есть ли в gcc, но раньше в Си были функции dostounix() и unixtodos(), которые преобразовывали время из формата DOS в UNIX и наоборот (пользовался ими когда-то) и им хватало переменной типа long.
Это не он придумал, это придумал:
Жозе́ф Жюст Скалиге́р — французский гуманист-филолог, историк и воин, итальянец по происхождению, один из основателей современной научной исторической хронологии, издатель и комментатор античных текстов.
Во время Скалигера о timestamp ничего не знали и ко времени относились попроще, поэтому в дате, записанной "по-Юлиански", целая часть - это дни, а дробная - часы, минуты и т.д.
Это не он придумал, это придумал:
Жозе́ф Жюст Скалиге́р — французский гуманист-филолог, историк и воин, итальянец по происхождению, один из основателей современной научной исторической хронологии, издатель и комментатор античных текстов.
Во время Скалигера о timestamp ничего не знали и ко времени относились попроще, поэтому в дате, записанной "по-Юлиански", целая часть - это дни, а дробная - часы, минуты и т.д.
ну правильно дробная часть ето :часы минуты,секунды.Все нужно для астрономии.Может попробую double там после запятой немножко больше цифр можно вписать.силка https://www.arduino.cc/reference/en/language/variables/data-types/float/
Или другой вариант ардуино due там " On the Arduino Due, doubles have 8-byte (64 bit) precision."
в ардуине double и float это одно и то же.
в ардуине double и float это одно и то же.
Это справедливо только для плат на базе атмега(тини, в общем на 8ми битных) Для дуе это два разных типа, как и написал ТС
У ТС через "или" написано :)
Кстати, как вариант, можно сделать структуру, и в ней отдельно хранить дату, отдельно время.
А вообще, зачем понадобилось именно хранить дату/время в юлианском виде?
ну правильно дробная часть ето :часы минуты,секунды.Все нужно для астрономии.Может попробую double там после запятой немножко больше цифр можно вписать.силка https://www.arduino.cc/reference/en/language/variables/data-types/float/ Или другой вариант ардуино due там " On the Arduino Due, doubles have 8-byte (64 bit) precision."
проще хранить время в другом формате, без дробных частей, как уже советовали выше - например формате unix
Тоже читал документацию там било сказано что float и double одно и тоже самое.Пи выводе в serial.println более двух знаков после запятой не выводит.
Я бы и в UTC хранил нет проблем.Только там Юлианское Время JD
вы документацию по диагонали читаете?
serial.println выведет столько знаков, сколько закажете:
http://arduino.ru/Reference/Serial/Print
проще хранить время в другом формате, без дробных частей, как уже советовали выше - например формате unix
Я тоже сначала так подумал, но вдруг человеку дробные части секунды нужны... астрономия ж.
Огромное СПАСИБО.Вот я идиот,вечерком попробую))
Но, я думаю, вам нужно учитывать тот факт, что unixtime начинается с 1970 г.
Конвертация производится так: https://stackoverflow.com/questions/466321/convert-unix-timestamp-to-julian
В местной библиотеке с 2000. А так нормальная тут библиотека time.h - как везде.
Да уж, добавили путаницы с этой Y2K Epoch.
Хотя, если ТС нужно производить операции со временем, относящимся к более раннему, чем 1970г. / 2000 г. периоду - никакой "стандартный unixtime" ему не поможет. Придется свой изобретать.