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, т.е. общее число знаков и знаки после запятой. Может кому понадобится. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти