powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема округления даты (Double)
12 сообщений из 37, страница 2 из 2
Проблема округления даты (Double)
    #40020157
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Цель любого округления получить цельночисленное значение. Топикстартеру не нужно 0,9999999999 часов
...
Рейтинг: 0 / 0
Проблема округления даты (Double)
    #40020164
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо ответа на вопрос демагогия пошла.
...
Рейтинг: 0 / 0
Проблема округления даты (Double)
    #40020167
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если надо "кол-во полных часов между двумя датами":

Res:=Trunc(Abs(d1-d2)*24+0.0000000001);

P.S. При решении через DateTimeToMilliseconds стоит уменьшить зазор в часу менее чем 1 мсек получается прикол.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function HoursBetween(const ANow, AThen: TDateTime): Int64;
begin
  Result := Abs(DateTimeToMilliseconds(ANow) - DateTimeToMilliseconds(AThen))
    div (MSecsPerSec * SecsPerMin * MinsPerHour);
end;

begin
  var D1 := StrToDateTime('25.11.20 00:00');
  var D2 := StrToDateTime('24.11.20 23:00')+1/24/3600/10000;
  writeln(Trunc(Abs(D1-D2)*24+0.0000000001));
  writeln(HoursBetween(D1,D2));
end.


0
1

Мой подход и точнее и быстрей. Как-то так.
...
Рейтинг: 0 / 0
Проблема округления даты (Double)
    #40020246
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Мой подход и точнее и быстрей. Как-то так.

С чего он точнее, если выдаёт час при интервале меньше часа?..

Тогда уж правильнее сделать функцию
Код: pascal
1.
function HoursBetween(...; AccuracyMSec: Double): Integer;

, где AccuracyMSec - точность определения интервала в миллисекундах.
...
Рейтинг: 0 / 0
Проблема округления даты (Double)
    #40020269
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
alekcvp
rgreat
Мой подход и точнее и быстрей. Как-то так.

С чего он точнее, если выдаёт час при интервале меньше часа?..

Тогда уж правильнее сделать функцию
Код: pascal
1.
function HoursBetween(...; AccuracyMSec: Double): Integer;


, где AccuracyMSec - точность определения интервала в миллисекундах.


тогда уж выдавать разницу в секундах, а не в часах.
а дальше пусть кому как надо округляют
...
Рейтинг: 0 / 0
Проблема округления даты (Double)
    #40020293
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
тогда уж выдавать разницу в секундах, а не в часах.
а дальше пусть кому как надо округляют

999 мсек - это одна секунда или ноль?.. А 999.99?
...
Рейтинг: 0 / 0
Проблема округления даты (Double)
    #40020302
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
alekcvp
defecator
тогда уж выдавать разницу в секундах, а не в часах.
а дальше пусть кому как надо округляют

999 мсек - это одна секунда или ноль?.. А 999.99?


я написал - в секундах

defecator

тогда уж выдавать разницу в секундах , а не в часах.
а дальше пусть кому как надо округляют
...
Рейтинг: 0 / 0
Проблема округления даты (Double)
    #40020313
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
rgreat
Мой подход и точнее и быстрей. Как-то так.

С чего он точнее, если выдаёт час при интервале меньше часа?.
Где?!
...
Рейтинг: 0 / 0
Проблема округления даты (Double)
    #40020318
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
alekcvp
пропущено...
С чего он точнее, если выдаёт час при интервале меньше часа?.
Где?!

Вот здесь:
Код: pascal
1.
  var D2 := StrToDateTime('24.11.20 23:00')+1/24/3600/10000;
...
Рейтинг: 0 / 0
Проблема округления даты (Double)
    #40020319
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
alekcvp
пропущено...

999 мсек - это одна секунда или ноль?.. А 999.99?

я написал - в секундах
defecator

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

И? Разница в 999 мсек - это разница в одну секунду или в ноль секунд?
А почему именно в секундах, а не в миллисекундах?
А почему именно в одну, а не в 0.1?

Вообще весь вопрос в том - насколько точно может время определять компьютер и к этой точности привязаться при определении интервалов, с учётом погрешности округления Double.
...
Рейтинг: 0 / 0
Проблема округления даты (Double)
    #40020326
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

Где мой код выдает 1?
То что ты зацитировал это задание входных параметров.
При них мой код выдает 0.
...
Рейтинг: 0 / 0
Проблема округления даты (Double)
    #40020332
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
alekcvp,

Где мой код выдает 1?
То что ты зацитировал это задание входных параметров.
При них мой код выдает 0.

Да, перепутал, извини :)
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема округления даты (Double)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]