![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день возникла проблема с написанием функции преобразование миллисекунд в формат времени
проблемы с делением !!!! Код:
function TForm1.GetTimeFromSecs(msec : Integer) : String; var hh, mm, ss ,sss: integer; begin ss := msec div 1000; // mm := msec mod 6000; // hh := mm div 3600; if hh <> 0 then Result:=Format('%2.2d:%2.2d:%2.2d', [hh,mm,ss]) else Result:=Format('%2.2d:%2.2d', [mm,ss]); end; |
#2
|
||||
|
||||
![]() Вы как-то странно считаете. Давайте вместе
![]() 1. В 1 секунде 1000 мс. 2. В 1 минуте 60 секкунд. 3. В 1 часе 60 минут. Для начала определим большее (часы): hh := msec div (60 * 60 * 1000) Глянем остаток: ost := msec - hh * (60 * 60 * 1000) Если остаток > 0, то продолжаем. Определим минуты: mm := ost div (60 * 1000) Опять смотрим остаток: ost := mm * (60 * 1000) Если остаток > 0, то продолжаем. Определим секунды: ss := ost div 1000 Ну и еще раз вычислив аналогично остаток, получим миллисекунды: mms := ost - ss * 1000 Фсе ![]() Можно сделать и без переменной под остаток. |
#3
|
|||
|
|||
![]() dr. F.I.N. а без остатка как будет выглядеть !!!
|
#4
|
||||
|
||||
![]() Ты меня просто убиваешь. Тут программированием и не пахнет. Математика 5й (если не младше) класс:
1. hh := msec div (60*60*1000); 2. mm := (msec - hh*(60*60*1000)) div (60*1000); 3. ss := msec - (hh*60 - mm)*60*1000; 4. mss := msec - (hh*60*60 - mm*60 - ss)*1000; P.S. мог ошибиться при упрощении и выносе общего множителя за скобки. Ночь за окном, голова не варит. |
#5
|
|||
|
|||
![]() Код:
procedure TimeDiv(ASrc, ADivider : Integer; var ADiv, AMod : Integer); begin ADiv := ASrc div ADivider; AMod := ASrc mod ADivider; end; var msecs : Integer; dd, hh, mm, ss, ms : Integer; begin msecs := 123456789; // Начальное значение, должно задаваться извне TimeDiv(msecs, 1000, ss, ms); // сек и мсек из мсек TimeDiv(ss, 60, mm, ss); // мин и сек из сек TimeDiv(mm, 60, hh, mm); // часы и мин из мин // TimeDiv(hh, 24, dd, hh); // дни и часы из часов ShowMessage(Format('%d часов %d минут %d секунд %d мсекунд',[hh,mm,ss,ms]); end; |
#6
|
|||
|
|||
![]() Все сделал !!!
Код:
function TForm1.GetTimeFromSecs(msec : Integer) : String; var hh, mm, ss ,sss: integer; begin sss := msec div 1000; ss := (sss mod 3600) mod 60; mm:= (sss mod 3600) div 60 ; hh := sss div 3600; if hh <> 0 then Result:=Format('%2.2d:%2.2d:%2.2d', [hh,mm,ss]) else Result:=Format('%2.2d:%2.2d', [mm,ss]); end; Огромное всем спасибо |