dido Опубликовано 8 июня, 2004 Жалоба Поделиться Опубликовано 8 июня, 2004 Требуется от одной даты отнять другую дату а результат получить в годах (число real). Как это сделать в Delphi? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Kuzmich Опубликовано 9 июня, 2004 Жалоба Поделиться Опубликовано 9 июня, 2004 YearsBetween(const ANow, AThen:TDateTime): integer... Integer в Real перевести легко... Колличество лет между указанными датами... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
dido Опубликовано 9 июня, 2004 Автор Жалоба Поделиться Опубликовано 9 июня, 2004 Kuzmich Пожалуйста приведи примерчик (простенький) использования этой функции, а то я не пойму как. Также не пойму почему на выходе integer когда может быть и дробная часть года. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 9 июня, 2004 Жалоба Поделиться Опубликовано 9 июня, 2004 dido не пойму почему на выходе integer когда может быть и дробная часть года Т.е. тебе надо результат типа 3.24 года? Тогда посчитай разницу в днях, и раздели на 365 (ИМХО погрешность из-за високосного года будет невелика). Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Kuzmich Опубликовано 10 июня, 2004 Жалоба Поделиться Опубликовано 10 июня, 2004 Тогда посчитай разницу в днях, и раздели на 365 Тогда такая функция: DaysBetween(const ANow, AThen: TDateTime): integer; дробная часть года Колличество целых лет... Пожалуйста приведи примерчик n: integer; n:=YearsBetween(1.1.2000, 1.1.2005); Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
dido Опубликовано 10 июня, 2004 Автор Жалоба Поделиться Опубликовано 10 июня, 2004 Kuzmich Вот часть кода: var n: integer; procedure TForm1.Button1Click(Sender: TObject); begin n:=YearsBetween(1.1.2000, 1.1.2005); Edit1.Text:=IntToStr(n); end; Программа прерывается после YearsBetween, указывая ошибки: Undeclared identifier:'YearsBetween' Record, object or class type required Missing operatot or semicolon. В чем дело? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aTeos Опубликовано 11 июня, 2004 Жалоба Поделиться Опубликовано 11 июня, 2004 dido В раздел uses подключи модуль DateUtils. Т.е. должно получиться примерно так: uses Windows, Messages, <...>, Controls, Forms, Dialogs, DateUtils; Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Kuzmich Опубликовано 11 июня, 2004 Жалоба Поделиться Опубликовано 11 июня, 2004 Опередил меня... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
dido Опубликовано 11 июня, 2004 Автор Жалоба Поделиться Опубликовано 11 июня, 2004 aTeos После подключения модуля DateUtils осталось напоминание об ошибке - Record, object or class type required. Что еще нужно сделать? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 11 июня, 2004 Жалоба Поделиться Опубликовано 11 июня, 2004 Функция DaysBetween() в качестве параметров принимает тип TDateTime. Выражается он числом с плавающей точкой, т.к. определен через Double. Для подстановки даты в текстовом виде необходимо преобразование с помощью функции StrToDateTime(). Так как время тебя не интересует, можно использовать тип TDate (он определен через TDateTime), и, соответственно функцию StrToDate. Пример: n:=DaysBetween(StrToDate('01.01.2002'), StrToDate('01.05.2004')); P.S. Год можно писать и двумя знаками, насчет Y2K - читай хелп по StrToDate. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
dido Опубликовано 12 июня, 2004 Автор Жалоба Поделиться Опубликовано 12 июня, 2004 (изменено) Shurr Все работает, но осталось еще два вопроса: 1. Как перейти с одного Edit в другое клавишей Enter, мышкой и Tab неудобно. 2. Как отрезать лишние знаки после запятой, оставив, например, только два? Изменено 12 июня, 2004 пользователем dido Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Kuzmich Опубликовано 13 июня, 2004 Жалоба Поделиться Опубликовано 13 июня, 2004 2. Как отрезать лишние знаки после запятой, оставив, например, только два? Форматный вывод попробуй... n:10:2 вместо просто n, где 10-всего знаков под число (в том числе и запятая), 2-под дробную часть... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aTeos Опубликовано 13 июня, 2004 Жалоба Поделиться Опубликовано 13 июня, 2004 dido 1. Как перейти с одного Edit в другое клавишей Enter, мышкой и Tab неудобно. Вообще советую книжки почитать. А так, если сумеешь отловить нажатие кнопки Enter, то в этой процедуре вставь Edit2.SetFocusвместо Edit2 вставь название твоего поля ввода, на который нужно установить фокус. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
dido Опубликовано 13 июня, 2004 Автор Жалоба Поделиться Опубликовано 13 июня, 2004 Kuzmich Для Pascal это понятно, но как это сделать в Delphi? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Kuzmich Опубликовано 13 июня, 2004 Жалоба Поделиться Опубликовано 13 июня, 2004 Когда ты с ней что-то делаешь, вместо n напиши n:10:2... Должно работать... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
dido Опубликовано 16 июня, 2004 Автор Жалоба Поделиться Опубликовано 16 июня, 2004 Kuzmich Спасибо за помощь, но,как я и предполагал "n:6:2" в Delphi не дейтвует. Я нашел нужную функцию - FloatToStrF(p,ffcurrency,6,2). Тут p - переменная, ffcurrency - формат числа (в данном случае - деньги), остальное как и в Pascal, т.е. общее число знаков и знаки после запятой. Может кому понадобится. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.