Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2011, 19:28   #1
Никита.
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 14
По умолчанию delphi. invalid floating point operation

Код:
for i:=1 to d do
      begin
      u:=(strtoint(MS.Cells[i,0])-c)/sqrt(ff);
      MS.Cells[i,3]:= FloatToStr(u);
      end;
      for i:=1 to d do
      begin
      m:=strtofloat(MS.Cells[i,3]););
      e:=roundto(m,-4);    //тут ошибка
       MS.Cells[i,4]:= FloatToStr(e);
end;
но, если я меняю в строке m:=strtofloat(MS.Cells[i,3]); с 3 на 0, то работает, в моей таблице MS.Cells[i,0]-целые числа, а MS.Cells[i,3] - дробные, проблема в этом?? и как ее решить??
а ошибка кстати вот такая invalid floating point operation
Заранее спасибо!


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 19.07.2011 в 20:53.
Никита. вне форума Ответить с цитированием
Старый 19.07.2011, 20:14   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

var
r: TFormatSettings;

GetLocaleFormatSettings(0, r);
r.Decimalsparator:='?'; // ? то что ты используешь для отделения дробной части
m:=strtofloat(MS.Cells[i,3], r);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 19.07.2011, 20:32   #3
Никита.
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 14
По умолчанию

в смысле я не понял не много??
// ? то что ты используешь для отделения дробной части
это то где нужно ее убрать?? т.е. моя строка MS.Cells[i,3]??
Никита. вне форума Ответить с цитированием
Старый 19.07.2011, 20:41   #4
LSpirit
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 28
По умолчанию

207 Invalid floating point operation (Недопустимая операция с плавающей запятой) .

Возможные причины сообщения:

аргумент функций TRUNC или ROUND не может быть преобразован в целое число, находящееся внутри диапазона типа LONGINT (от -2147483648 до +2147483647);
отрицательный аргумент функции SQRT (извлечение квадратного корня);
аргумент функции LN (логарифм) равен нулю или имеет отрицательное значение;
Цель оправдывает средства.
LSpirit вне форума Ответить с цитированием
Старый 19.07.2011, 20:53   #5
Никита.
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 14
По умолчанию

это я тот же самый=))))))))
просто первый день на этом форуме не сразу нашел конкретную тему с делфи..
дак у меня же в риале все,
вот весь код баттона
[CODE]
Код:
procedure TForm1.Button4Click(Sender: TObject);
 var d,i,h:integer;
 u,c,ff,e,m:real;

 begin
 ms.rowcount:=5;
 MS.Cells[0,2]:= 'H';
 MS.Cells[0,3]:= 'Ui';
 d:=strtoint(Edit2.Text);
 for i:= 1 to d-1 do
 begin
 h:= strtoint( MS.Cells[i,0])-strtoint(MS.Cells[i+1,0] ) ;
 MS.Cells[i+1,2]:=inttostr(abs(h));
 MS.Cells[1,2]:=MS.Cells[1,0] ;
 end;
 for i:=1 to d do
 begin
 u:=(strtoint(MS.Cells[i,0])-c)/sqrt(ff);
 MS.Cells[i,3]:= FloatToStr(u);
 end;
 for i:=1 to d do
 begin
 m:=strtoint(MS.Cells[i,3])+0.00001;
 e:=roundto(m,-2);
 MS.Cells[i,4]:= FloatToStr(e);
 end;
 end.
или я может не понял что ты имеешь ввиду??=)

Последний раз редактировалось Никита.; 19.07.2011 в 20:59.
Никита. вне форума Ответить с цитированием
Старый 20.07.2011, 21:28   #6
Никита.
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 14
По умолчанию

аааааа, у меня паника вроде..
кстати у программы есть другие баттоны, и если я другими не оперирую, то при нажатии на этот все работает. почему так то?? помогите пожалуйста, мне, просто уже скора сдавать программу, а ее еще нету=(((
зарание благодарен за ваши старания!!
Никита. вне форума Ответить с цитированием
Старый 21.07.2011, 11:12   #7
Jaguar83
Профессионал
Пользователь
 
Аватар для Jaguar83
 
Регистрация: 25.05.2011
Сообщений: 91
По умолчанию

Код твой правильный с точки зрения синтаксиса. Если ошибка возникает при нажатии других баттонов, значит ошибка в другом месте. Возможно, где-то происходит деление на ноль, или какая-нибудь неочевидная ошибка, связаная с некорректными входными данными. В любом случае, даю тебе ценный совет: научись пользоваться отладчиком, прочитай про брейкпоинты, пошаговое выполнение программы, контроль переменных. Заниматься здесь выявлением багов в твоей проге наврядли кто будет.

UPDATE
смысл этой строки в чем?
Код:
m:=strtoint(MS.Cells[i,3])+0.00001;
Помог? Будь человеком - жми на весы слева!

Последний раз редактировалось Jaguar83; 21.07.2011 в 12:56.
Jaguar83 вне форума Ответить с цитированием
Старый 21.07.2011, 11:32   #8
Никита.
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 14
По умолчанию

дак мне не обязательно узнать в чем причина моего недочета тут, мне хотя бы узнать как написать прогу что бы она округлила мои ячейки MS.Cells[i,3] до 2 знаков после запятой..
Никита. вне форума Ответить с цитированием
Старый 21.07.2011, 13:27   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

пробуй так:
Код:
 for i:=1 to d do
 begin
   MS.Cells[i,4] := FloatToStr(Round(StrToFloat(MS.Cells[i,3])*10)/10);
 end;
p.s. если до сих пор не решил проблему с тем, что у тебя является разделителем целой и дробной части - точка или запятая, тогда скажи об этом, научу как сделать так, чтобы программе вообще пофиг было - можешь в одной ячейке писать через точку, в другой - через запятую..
Хотя, конечно, это неправильно.
Рекомендую вначале программы написать
Код:
    DecimalSeparator  := '.';
и везде использовать точку в качестве разделителя целой и дробной части. ВСЕГДА!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.07.2011, 13:53   #10
Никита.
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 14
По умолчанию

Спасибо большое я уже разобрался сделал так
MS.Cells[i,3]:=FloatToStrF(+strtofloat(MS.Cells[i,3]), ffFixed, 10, 4);
Никита. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Invalid floating point operation на паскале maziLa Помощь студентам 3 26.05.2010 19:37
invalid floating point operation Mikhail91 Общие вопросы C/C++ 5 24.03.2010 00:05
Ошибка: invalid floating point operation Willow Помощь студентам 3 24.01.2010 18:42
invalid floating point operation mosq Общие вопросы Delphi 7 01.11.2009 13:28
Invalid floating point operation Skytis Помощь студентам 3 07.05.2008 12:16