| 
| 
 | Вопрос # 2 435/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!
 Нужно найти количество недель в промежутке времени. Допустим на форме 2 DataTimePicker'a и edit, нужно в edit'e показать количество недель в промежутке указанном в DataTimePicker'ах
 
 п.с. это я гдето нашел правда так и не смог додуматься:
 "WeekSpan функция DateUtils Возвращает количество недель, включая дробную часть, между двумя значениями TDateTime."
 К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса) 
|  |   Вопрос задал: 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 (статус: Посетитель), 19 февраля 2009, 19:24 [#1]:а как сделать чтоб не только полных недель показывало, а с дробной величиной? |  
|   | Dron (статус: Студент), 19 февраля 2009, 19:26 [#2]:Использовать полученное значение (W) по своему усмотрению. С дробной частью - вместо IntToStr(Trunc(W)) - FloatToStr(W). С уважением. |  
|   | necboss (статус: Посетитель), 19 февраля 2009, 19:41 [#3]:после запятой выходят 14 символов, как сделать 2 (3,34527934687234=3,35)
 |  
|   | Dron (статус: Студент), 19 февраля 2009, 19:43 [#4]:Приблизительно (по памяти) так: 
 FloatToStrF(W,ffFixed,4,2);Если будет немного не то - попробовать поменять циферки. С уважением. |  
|   | necboss (статус: Посетитель), 19 февраля 2009, 19:47 [#5]:спасибо, кажись все   |  
|   | 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 (статус: Студент), 19 февраля 2009, 21:09 [#7]:(W,ffFixed,4,2) - это что такое? А где же название функции - FloatToStrF? С уважением. |  
|   | 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 (статус: Посетитель), 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 (статус: Посетитель), 20 февраля 2009, 18:10 [#12]:да, но мне нужно дробное число |  
|   | Вадим К (статус: Академик), 20 февраля 2009, 18:58 [#13]:а там что, строка что ли будет? там как раз и будет дробное число. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | necboss (статус: Посетитель), 20 февраля 2009, 19:35 [#14]:в смысле чтоб показывало значения после запятой (например: 3,25) |  
|   | Вадим К (статус: Академик), 20 февраля 2009, 23:31 [#15]:Ну так кто мешает? что не так? Галочка "подтверждения прочтения" - вселенское зло. |  
|   | necboss (статус: Посетитель), 21 февраля 2009, 18:05 [#16]:так показывает тока целые числа |  
|   | Вадим К (статус: Академик), 21 февраля 2009, 19:18 [#17]:значит что то делаете не так, но в другом месте. В базу обязано попасть вещественное число. Может просто туда не пишете его. Может просто округляете перед записью?
 Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |