Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Умножение и деление чисел с плавающей точкой 
:(
    Опции темы
Guedda
Дата 26.9.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 1
Всего: 78



Ты читал ссылку, которую я тебе выше написал??? Изучай!


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
ACMilian
Дата 26.9.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 5.9.2006
Где: Беларусь

Репутация: нет
Всего: нет



Цитата(ACMilian @  26.9.2007,  16:01 Найти цитируемый пост)
q.FieldByName('Udel').AsString := FloaToStrF(q.FieldByName('R_Fakt').AsFloat * q.FieldByName('Norma').AsFloat / q.FieldByName('R_Plan').AsFloat, ffGeneral, 8, 8);


ну так я так пишу? разве не верно? 
PM MAIL ICQ   Вверх
Alexeis
Дата 26.9.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



ACMilian, попробуй поэтапно, сначала вычислять, потом сковертировать в строку, затем в базу, может так легче ошибка найдется?

Добавлено через 1 минуту и 26 секунд
  Код написан правильно, осталось проверить значения.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ACMilian
Дата 26.9.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 5.9.2006
Где: Беларусь

Репутация: нет
Всего: нет



такой код заносит не то представление чмсла:
Код

q.FieldByName('Udel').AsString := FloaToStrF(q.FieldByName('R_Fakt').AsFloat * q.FieldByName('Norma').AsFloat / q.FieldByName('R_Plan').AsFloat, ffGeneral, 8, 8);

в q.FieldByName('R_Fakt').AsFloat находится значение - 0.015
в q.FieldByName('Norma').AsFloat  - 0.00031
в q.FieldByName('R_Plan').AsFloat - 0.05
если вношу результат этих действий в переменную строкового типа вот так:
Код

var
 stroka : String;
begin
stoka := FloaToStrF(q.FieldByName('R_Fakt').AsFloat * q.FieldByName('Norma').AsFloat / q.FieldByName('R_Plan').AsFloat, ffGeneral, 8, 8);
end;

то в строке находитсо правильное представление числа т.е. 0.000093
но если я пытаюсь присвоить это значение в датасэт таким образом:
Код

q.FieldByName('Udel').AsString := stroka;


то туда заносится неправильное ппредставление числа...
где я ошибаюсь?

Это сообщение отредактировал(а) ACMilian - 26.9.2007, 18:35
PM MAIL ICQ   Вверх
Alix
Дата 26.9.2007, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
PM MAIL ICQ Skype   Вверх
Esperito
Дата 28.9.2007, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 2.9.2007

Репутация: нет
Всего: 3



А не проще сделать так?
Код

q.FieldByName('Udel').AsFloat := q.FieldByName('R_Fakt').AsFloat * q.FieldByName('Norma').AsFloat / q.FieldByName('R_Plan').AsFloat;

Это, разумеется, при условии, что Udel - число.
А если нет, тогда вот так:
Код

q.FieldByName('Udel').AsString := FloaToStrF(q.FieldByName('R_Fakt').AsFloat * q.FieldByName('Norma').AsFloat / q.FieldByName('R_Plan').AsFloat, ffFixed, 8, 8);

Это должно сработать smile
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0768 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.