Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Для новичков > Умножение и деление чисел с плавающей точкой |
Автор: ACMilian 26.9.2007, 12:52 |
Привет всем. Туплюсь что-та. Как в Дэлфи умножать и делить очень маленькие десятичные числа? Например 0.015 * 0.00031 / 0.05 ? |
Автор: Rennigth 26.9.2007, 13:10 |
так и делить... в чем проблема? |
Автор: Alix 26.9.2007, 13:16 | ||
У тебя теряются знаки после запятой? Используй тип Double или Extended.
я так понял имелись в виду действительные? (aka вещественные) |
Автор: Alexeis 26.9.2007, 13:25 |
Extended сохраняет 19 значащих цифр, т.е. число типа 0,0000000000000000000000000000000000000000000000000000000000000000001234567890123456789 нормально храниться умножается делиться и т.д. |
Автор: Guedda 26.9.2007, 13:40 |
А если у тебя проблемы именно с плавающей точкой, используй SetDelimiter |
Автор: ACMilian 26.9.2007, 14:11 | ||
вот пример:
вот в d какая то фигня хранится. |
Автор: Guedda 26.9.2007, 14:19 | ||
У меня все нормально выводится, 0,000093. А у тебя что? Пользовался этим кодом:
|
Автор: Guedda 26.9.2007, 15:02 | ||
Значит используй http://www.delphisources.ru/pages/faq/faq_delphi_basics/FloatToStrF.php.html Добавлено через 12 секунд Ты просто неотформатированно делаешь вывод Добавлено через 5 минут и 21 секунду
|
Автор: ACMilian 26.9.2007, 15:29 |
а как мне засунуть это число в поле датасэта? чтоб оно там правильно отображалось? |
Автор: Alexeis 26.9.2007, 15:51 | ||
Например в виде отформатированной строки, полученной FloatToStrF, как это показал Guedda. |
Автор: Esperito 26.9.2007, 15:52 |
Это зависит от твоих настроек отображения поля. А присваиваться оно будет нормально, т.к. это просто такая научная форма записи числа. |
Автор: ACMilian 26.9.2007, 16:01 | ||
ну к ,примеру, если я делаю так:
то в q.FieldByName('Udel').AsString заноситсо неправильное представление. а как по другому? |
Автор: Guedda 26.9.2007, 16:55 |
Покажи, какое именно неправильное представление заносится? |
Автор: ACMilian 26.9.2007, 17:04 |
вот такое: 9.3E-5.. |
Автор: Guedda 26.9.2007, 17:10 |
Ты читал ссылку, которую я тебе выше написал??? Изучай! |
Автор: ACMilian 26.9.2007, 17:16 | ||
ну так я так пишу? разве не верно? |
Автор: Alexeis 26.9.2007, 18:02 |
ACMilian, попробуй поэтапно, сначала вычислять, потом сковертировать в строку, затем в базу, может так легче ошибка найдется? Добавлено через 1 минуту и 26 секунд Код написан правильно, осталось проверить значения. |
Автор: ACMilian 26.9.2007, 18:34 | ||||||
такой код заносит не то представление чмсла:
в q.FieldByName('R_Fakt').AsFloat находится значение - 0.015 в q.FieldByName('Norma').AsFloat - 0.00031 в q.FieldByName('R_Plan').AsFloat - 0.05 если вношу результат этих действий в переменную строкового типа вот так:
то в строке находитсо правильное представление числа т.е. 0.000093 но если я пытаюсь присвоить это значение в датасэт таким образом:
то туда заносится неправильное ппредставление числа... где я ошибаюсь? |
Автор: Alix 26.9.2007, 20:31 |
Не гарантирую, что то, что я скажу верно, я лишь посмотрел по хелпу, а с БД я почти не работал. Как я понимаю делая field.AsString := number ты присваиваешь полю значение, которое потом (ведь это поле TFloatField, да?), с помощью, наверное, StrToFloat переводится в число с плавающей точкой и так в поле и хранится. А форматирование для вывода на экран надо задавать через TFloatField.DisplayFormat. Формат маски см. в хелпе. Заодно обрати внимание на TFloatField.EditFormat |
Автор: Esperito 28.9.2007, 20:53 | ||||
А не проще сделать так?
Это, разумеется, при условии, что Udel - число. А если нет, тогда вот так:
Это должно сработать ![]() |