![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
ACMilian |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 5.9.2006 Где: Беларусь Репутация: нет Всего: нет |
Привет всем.
Туплюсь что-та. Как в Дэлфи умножать и делить очень маленькие десятичные числа? Например 0.015 * 0.00031 / 0.05 ? |
|||
|
||||
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 15 Всего: 76 |
-------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
Alix |
|
|||
![]() L45 ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 4.5.2005 Где: Pskov/Spb Репутация: 8 Всего: 23 |
У тебя теряются знаки после запятой? Используй тип Double или Extended.
я так понял имелись в виду действительные? (aka вещественные) -------------------- Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой High tech. Low live. (с) Gardner Dozois |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Extended сохраняет 19 значащих цифр, т.е. число типа 0,0000000000000000000000000000000000000000000000000000000000000000001234567890123456789 нормально храниться умножается делиться и т.д.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 1 Всего: 78 |
А если у тебя проблемы именно с плавающей точкой, используй SetDelimiter
-------------------- Ll 2 |
|||
|
||||
ACMilian |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 5.9.2006 Где: Беларусь Репутация: нет Всего: нет |
вот пример:
вот в d какая то фигня хранится. |
|||
|
||||
Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 1 Всего: 78 |
У меня все нормально выводится, 0,000093. А у тебя что?
Пользовался этим кодом:
-------------------- Ll 2 |
|||
|
||||
ACMilian |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 5.9.2006 Где: Беларусь Репутация: нет Всего: нет |
||||
|
||||
Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 1 Всего: 78 |
Значит используй FloatToStrF
Добавлено через 12 секунд Ты просто неотформатированно делаешь вывод Добавлено через 5 минут и 21 секунду
-------------------- Ll 2 |
|||
|
||||
ACMilian |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 5.9.2006 Где: Беларусь Репутация: нет Всего: нет |
а как мне засунуть это число в поле датасэта?
чтоб оно там правильно отображалось? |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Например в виде отформатированной строки, полученной FloatToStrF, как это показал Guedda. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Esperito |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 2.9.2007 Репутация: нет Всего: 3 |
Это зависит от твоих настроек отображения поля. А присваиваться оно будет нормально, т.к. это просто такая научная форма записи числа.
|
|||
|
||||
ACMilian |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 5.9.2006 Где: Беларусь Репутация: нет Всего: нет |
ну к ,примеру, если я делаю так:
то в q.FieldByName('Udel').AsString заноситсо неправильное представление. а как по другому? |
|||
|
||||
Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 1 Всего: 78 |
Покажи, какое именно неправильное представление заносится? -------------------- Ll 2 |
|||
|
||||
ACMilian |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 5.9.2006 Где: Беларусь Репутация: нет Всего: нет |
вот такое: 9.3E-5..
|
|||
|
||||
Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 1 Всего: 78 |
Ты читал ссылку, которую я тебе выше написал??? Изучай!
-------------------- Ll 2 |
|||
|
||||
ACMilian |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 5.9.2006 Где: Беларусь Репутация: нет Всего: нет |
||||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
ACMilian, попробуй поэтапно, сначала вычислять, потом сковертировать в строку, затем в базу, может так легче ошибка найдется?
Добавлено через 1 минуту и 26 секунд Код написан правильно, осталось проверить значения. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
ACMilian |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 5.9.2006 Где: Беларусь Репутация: нет Всего: нет |
такой код заносит не то представление чмсла:
в q.FieldByName('R_Fakt').AsFloat находится значение - 0.015 в q.FieldByName('Norma').AsFloat - 0.00031 в q.FieldByName('R_Plan').AsFloat - 0.05 если вношу результат этих действий в переменную строкового типа вот так:
то в строке находитсо правильное представление числа т.е. 0.000093 но если я пытаюсь присвоить это значение в датасэт таким образом:
то туда заносится неправильное ппредставление числа... где я ошибаюсь? Это сообщение отредактировал(а) ACMilian - 26.9.2007, 18:35 |
||||||
|
|||||||
Alix |
|
|||
![]() L45 ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 4.5.2005 Где: Pskov/Spb Репутация: 8 Всего: 23 |
Не гарантирую, что то, что я скажу верно, я лишь посмотрел по хелпу, а с БД я почти не работал.
Как я понимаю делая field.AsString := number ты присваиваешь полю значение, которое потом (ведь это поле TFloatField, да?), с помощью, наверное, StrToFloat переводится в число с плавающей точкой и так в поле и хранится. А форматирование для вывода на экран надо задавать через TFloatField.DisplayFormat. Формат маски см. в хелпе. Заодно обрати внимание на TFloatField.EditFormat Это сообщение отредактировал(а) Alix - 26.9.2007, 20:37 -------------------- Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой High tech. Low live. (с) Gardner Dozois |
|||
|
||||
Esperito |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 2.9.2007 Репутация: нет Всего: 3 |
А не проще сделать так?
Это, разумеется, при условии, что Udel - число. А если нет, тогда вот так:
Это должно сработать ![]() |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |