Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 26.03.2011
Сообщений: 34
1

Ошибка String to real

26.03.2011, 10:35. Просмотров 1915. Ответов 5
Метки нет (Все метки)

sum:=sum+sqr(center[k,j-1]-StrToFloat(Stringgrid1.cells[j+Select_K,i]));

Когда Stringgrid1.cells[j+Select_K,i] равен не целому числу (к примеру 67,8) Считает с ошибкой, но если там стоят целые то считает без ошибок.

Что может быть?????
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2011, 10:35
Ответы с готовыми решениями:

Ошибка: Incompatible types: 'String' and 'Real'
не подскажите как исправить код? unit Unit1; interface uses Windows, Messages, SysUtils,...

Ошибка: Incompatible types: 'string' and 'Real'
if strtofloat(label2.Text) > u1 then label4.Text := floattostr(strtofloat(label4.Text) + 1) and...

Из string в real ??
Как вывести в edit число 17.298 из строки "17.298 ЗHAЧEH. PEЖ. ПAPAMETPA B 1 TOЧKE " ???

Преобразование из String в Real
Здравствуйте. Скажите пожалуйста можно ли переменной вещественного типа присваивать значение...

5
5168 / 2027 / 435
Регистрация: 20.11.2009
Сообщений: 6,721
Записей в блоге: 1
26.03.2011, 11:18 2
А как вы записываете дробное число? например 3,5 или 3.5 ??? нужно как последний вариант запиывать
1
12953 / 5805 / 1704
Регистрация: 19.09.2009
Сообщений: 8,807
26.03.2011, 11:46 3
Вернее, это от региональных настроек системы зависит. Например, для Windows:
Пуск - Панель управления - Дата, время, язык и региональные стандарты - Язык и региональные стандарты - выбрать закладку "Региональные параметры" - на выбранной закладке нажать кнопку: "Настройка..." - откроется окно, в нём перейти на закладку "Числа" - на этой закладке в поле "Разделитель целой и дробной части", как раз, записан тот знак, который в данный момент в системе считается разделителем целой и дробной части. Чаще всего этим знаком является: "," или ".".
1
0 / 0 / 0
Регистрация: 26.03.2011
Сообщений: 34
26.03.2011, 12:47  [ТС] 4
Цитата Сообщение от Mawrat Посмотреть сообщение
Вернее, это от региональных настроек системы зависит. Например, для Windows:
Пуск - Панель управления - Дата, время, язык и региональные стандарты - Язык и региональные стандарты - выбрать закладку "Региональные параметры" - на выбранной закладке нажать кнопку: "Настройка..." - откроется окно, в нём перейти на закладку "Числа" - на этой закладке в поле "Разделитель целой и дробной части", как раз, записан тот знак, который в данный момент в системе считается разделителем целой и дробной части. Чаще всего этим знаком является: "," или ".".
Не работает.
Ну даже если так, допустим я скомпилировал файл и запустил прогу на другом компе, а там разделитель по другом, получается ошибка будет?

Добавлено через 3 минуты
Если меняю "," на "." и наоборот = ошибка

Вот часть кода:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 //Определяем центры кластеров
   for j:=0 to N_clast-1 do
    for i:=0 to Select_I-1 do
     center[j,i]:=StrToFloat(StringGrid1.Cells[i+1+Select_K,j+1]);
 
 //расчитываем расстояния
 for k:=0 to N_clast-1 do
  for i:=1 to Record_Col do
       Begin
       sum:=0;
       for j:=1 to Select_I do
       sum:=sum+sqr(center[k,j-1]-StrToFloat(Stringgrid1.cells[j+Select_K,i]));
       mas_d[i-1,k]:=sqrt(sum);
       end;
После того как определил расстояния я центры перепишу на среднее значение
center: array of array of real
0
12953 / 5805 / 1704
Регистрация: 19.09.2009
Сообщений: 8,807
26.03.2011, 13:22 5
Если пустая строка в ячейке - тоже будет ошибка. Надо предусмотреть такие случаи. Что касается независимости преобразования от разделителя целой и дробной частей, предлагаю вместо прямого использования StrToFloat(), применять такой код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//Преобразует строку в вещественное число.
//Если строка пустая результат устанавливается равным aDef.
//Если при вызове функции параметр aDef не указан, то значение aDef принимается
//равным нулю.
function StrToFloatSafe(const aStr : String; aDef : Extended = 0) : Extended;
const
  //Множество цифр.
  D = ['0'..'9'];
var
  S : String;
  i : Integer;
begin
  S := aStr;
  for i := 1 to Length(S) do begin
    if not (S[i] in D) then begin
      S[i] := DecimalSeparator;
      Break;
    end;
  end;
  if S = '' then
    Result := aDef
  else
    Result := StrToFloat(S)
  ;
end;
1
85 / 69 / 12
Регистрация: 17.02.2011
Сообщений: 138
26.03.2011, 22:06 6
А можно ограничить ввод числовой информации еще при заполнении таблицы. описать событие onKeyPreess грида. Например
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure Form1.StringGrid1KeyPress(Sender: TObject;
  var Key: Char);
begin
  if (key='.') then key:=DecimalSeparator;// Точку и запятую на всякий случай заменяем на разделитель дес числа
  if (key=',') then key:=DecimalSeparator;
  if not(key in ['0','1','2','3','4','5','6','7','8','9',DecimalSeparator,#13,#8,#9,#25,#26,#27,#28,#11])
    then
    begin
      key:=#0;
      beep;
    end;
end;
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2011, 22:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Incompatible types: 'Real' and 'string'
var n,i:integer; a:array of real; begin n:=strtoint(edit1.text); for i := 0 to n do begin...

Сложность с преобразованием Real в String
Здравствуйте.У меня есть число в переменной для примера 0,00007 когда я его преобразовываю с Реал в...

Обойти ошибку конвертации из string в real
Всем доброй поры суток! Есть такая инфа в файле: &s24 89.3122 \23 0.00 0.000 1s ...

Подскажите пожалуйста, как можно перевести массив из real в string
Подскажите пожалуйста, как можно перевести массив из real в string. Я устественно перевожу str(a,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.