Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 435

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, уважаемые эксперты!

Нужно найти количество недель в промежутке времени. Допустим на форме 2 DataTimePicker'a и edit, нужно в edit'e показать количество недель в промежутке указанном в DataTimePicker'ах

п.с. это я гдето нашел правда так и не смог додуматься:
"WeekSpan функция DateUtils Возвращает количество недель, включая дробную часть, между двумя значениями TDateTime."

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. delphi-7


necboss Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: necboss (статус: Посетитель)
Вопрос отправлен: 19 февраля 2009, 18:25
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Dron

Здравствуйте, necboss!
Ничего сложного в этом нет. Тем более, вы даже нашли функцию, которая определяет число недель. Текущая дата у TDateTimePicker хранится в свойстве DateTime. Поэтому:

var W: Extended;
...
W:=WeekSpan(DateTimePicker1.DateTime,DateTimePicker2.DateTime);
ShowMessage('Полных недель: '+IntToStr(Trunc(W)));
Удачи!

Ответ отправил: Dron (статус: Студент)
Время отправки: 19 февраля 2009, 18:34
Оценка за ответ: 5

Комментарий к оценке: не ожидал такой реакции, спасибо

Мини-форум вопроса

Всего сообщений: 17; последнее сообщение — 21 февраля 2009, 19:18; участников в обсуждении: 3.
necboss

necboss (статус: Посетитель), 19 февраля 2009, 19:24 [#1]:

а как сделать чтоб не только полных недель показывало, а с дробной величиной?
Dron

Dron (статус: Студент), 19 февраля 2009, 19:26 [#2]:

Использовать полученное значение (W) по своему усмотрению. С дробной частью - вместо IntToStr(Trunc(W)) - FloatToStr(W).
С уважением.
necboss

necboss (статус: Посетитель), 19 февраля 2009, 19:41 [#3]:

после запятой выходят 14 символов, как сделать 2
(3,34527934687234=3,35)
Dron

Dron (статус: Студент), 19 февраля 2009, 19:43 [#4]:

Приблизительно (по памяти) так:
FloatToStrF(W,ffFixed,4,2);
Если будет немного не то - попробовать поменять циферки.
С уважением.
necboss

necboss (статус: Посетитель), 19 февраля 2009, 19:47 [#5]:

спасибо, кажись все :)
necboss

necboss (статус: Посетитель), 19 февраля 2009, 21:07 [#6]:

терь мне нужно это значение присвоить ячейке таблицы

это работает:
DataModule2.ADOTable6.FieldByName('kol_vyhodov').Asinteger :=(Trunc(W));

но мне нужно с дробью, но это дает ошибку:
DataModule2.ADOTable6.FieldByName('kol_vyhodov').AsFloat :=(W,ffFixed,4,2);
Dron

Dron (статус: Студент), 19 февраля 2009, 21:09 [#7]:

(W,ffFixed,4,2) - это что такое? А где же название функции - FloatToStrF?
С уважением.
necboss

necboss (статус: Посетитель), 20 февраля 2009, 06:20 [#8]:

так тоже неработает:
DataModule2.ADOTable6.FieldByName('kol_vyhodov').AsFloat :=FloatToStrF(W,ffFixed,4,2);
Вадим К

Вадим К (статус: Академик), 20 февраля 2009, 10:01 [#9]:

Уважаемые вопрошающие. Когда пишете "не работает", всегда пишите как именно - не компилируется, возвращая ошибку (её можно внизу скопировать, если выделить и нажать Ctrl+C) или программа запускается, но уже в процессе работы выдает ошибку (многие MessageBox'ы тоже можнно скопировать через Ctrl+C!).
Теперь об ошибке.
AsFloat на то и AsFloat, что есть типа Float (вещественного, под делфийскому Extended). И присвоить ему строку (которую возвращает FloatToStrF) ну никак не получиться. Компилятор не знает, как привести эти типы.
В связи с этим, надо разобраться, какого типа поле kol_vyhodov в базе данных. Если оно там вещественное, тогда всякое понятие о "3 цифрах после запятой" - не более, чем разглагольствование. Если надо показывать 3 цифры после запятой, то и показываем - то есть при отображении обрезаем вывод, а не при добавлении в базу.
Если же поле kol_vyhodov есть строковое, что есть идеологически не верным, то в этом случае можно обрезать
DataModule2.ADOTable6.FieldByName('kol_vyhodov').AsString :=FloatToStrF(W,ffFixed,4,2);
но это черевато многими проблемами. Во первых, как только значение понадобиться для рассчетов, надо будет переводить в число. Во вторых, его будет сложно и неэффективно использовать в SQL.

Но смотря на названия поля, кажется, что оно целого типа (количество выходов - ну как может быть 3.2 выхода? хотя может у бухгалтеров другие мысли по этому поводу).
В целом, весело:)
Галочка "подтверждения прочтения" - вселенское зло.
necboss

necboss (статус: Посетитель), 20 февраля 2009, 12:00 [#10]:

када так:
DataModule2.ADOTable6.FieldByName('kol_vyhodov').AsFloat :=FloatToStrF(W,ffFixed,4,2);

ошибки такие:
[Error] Unit11.pas(49): Incompatible types: 'Double' and 'String'
[Fatal Error] MDIAPP.DPR(18): Could not compile used unit 'Unit11.pas'

мне нужно чтобы значение было численным, а не строковым, т.к. дальше c ним будут происходить матем-е операции.
Вадим К

Вадим К (статус: Академик), 20 февраля 2009, 12:45 [#11]:

DataModule2.ADOTable6.FieldByName('kol_vyhodov').AsFloat :=W;
и всё.
Галочка "подтверждения прочтения" - вселенское зло.
necboss

necboss (статус: Посетитель), 20 февраля 2009, 18:10 [#12]:

да, но мне нужно дробное число
Вадим К

Вадим К (статус: Академик), 20 февраля 2009, 18:58 [#13]:

а там что, строка что ли будет? там как раз и будет дробное число.
Галочка "подтверждения прочтения" - вселенское зло.
necboss

necboss (статус: Посетитель), 20 февраля 2009, 19:35 [#14]:

в смысле чтоб показывало значения после запятой (например: 3,25)
Вадим К

Вадим К (статус: Академик), 20 февраля 2009, 23:31 [#15]:

Ну так кто мешает? что не так?
Галочка "подтверждения прочтения" - вселенское зло.
necboss

necboss (статус: Посетитель), 21 февраля 2009, 18:05 [#16]:

так показывает тока целые числа
Вадим К

Вадим К (статус: Академик), 21 февраля 2009, 19:18 [#17]:

значит что то делаете не так, но в другом месте. В базу обязано попасть вещественное число. Может просто туда не пишете его.
Может просто округляете перед записью?
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 5 апреля 2020, 21:05
Выполнено за 0.03 сек.
Рейтинг@Mail.ru