powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
9 сообщений из 9, страница 1 из 1
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
    #39696272
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Есть record
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
  TActionParameter=record
    DrIRangeMin,
    DrIRangeMax,
    FDSettings,
    TCMin,
    TCMax:Double;

    OIParamOperation,
    TCToolNo:string;

    class function Empty:TActionParameter; static;
    function IsFilled:Boolean;
  end;

  TPointActionParameters=array of TActionParameter;

.....
{ TActionParameter }

class function TActionParameter.Empty: TActionParameter;
begin
  Result:=default(TActionParameter);
end;


Данный массив записей находится в классе:
Код: pascal
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.
26.
27.
28.
29.
30.
  TCPPoint=class
  private
    FIDCPPoint,
    FIDImage,
    FIDModel:Integer;

    PointActionParameters:TPointActionParameters;

    function GetItemsCount: Integer;
    procedure SetItemsCount(const Value: Integer);
  public
    property ItemsCount:Integer read GetItemsCount write SetItemsCount;
    property Items[Index: Integer]:TActionParameter read GetItem write SetItem;
  end;

function TCPPoint.GetItemsCount: Integer;
begin
  Result:=Length(PointActionParameters);
end;

procedure TCPPoint.SetItemsCount(const Value: Integer);
var
  i:Integer;
begin
  SetLength(PointActionParameters,Value);
  for I := Low(PointActionParameters) to High(PointActionParameters) do
    begin
      PointActionParameters[i]:=PointActionParameters[i].Empty;
    end;
end;



После создания класса происходит указание размера массива:
CPPoint.ItemsCount:=SpinEdit1.Value;

Далее,
хочу обратиться к значениям record'a класса:
Код: pascal
1.
2.
3.
4.
5.
6.
var
  a:TActionParameter;
begin
  a:=CPPoint.Items[AIndex];
  leToolSettingsFact.Text:=FloatToStr(a.FDSettings); //навожу мышью - значение=0, жму F7 -EConvertError '' is not a valid floating value
  leToolID.Text:=IntToStr(a.FDidTool); // аналогично :(



Причём, если нажать Continue и повторно выполнить эту же процедуру - всё ОК.

Что я сделал не так?

Спасибо.
...
Рейтинг: 0 / 0
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
    #39696278
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PointActionParameters[i]:=PointActionParameters[i].Empty;

заменить на

PointActionParameters[i]:=TActionParameter.Empty;
...
Рейтинг: 0 / 0
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
    #39696280
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi,

Спасибо за подсказку, не заметил.
Но не помогло.
...
Рейтинг: 0 / 0
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
    #39696281
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDiзаменить наА смысл?
Kast2KЧто я сделал не так?Этот код
Kast2K
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  TCPPoint=class
  private
    FIDCPPoint,
    FIDImage,
    FIDModel:Integer;

    PointActionParameters:TPointActionParameters;

    function GetItemsCount: Integer;
    procedure SetItemsCount(const Value: Integer);
  public
    property ItemsCount:Integer read GetItemsCount write SetItemsCount;
    property Items[Index: Integer]:TActionParameter read GetItem write SetItem;
  end;

компилироваться не будет. Методы GetItem и SetItem не определены
...
Рейтинг: 0 / 0
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
    #39696283
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда смотреть на код создания CPPoint -- возможно, там неыерное количество объектов или вовсе не создано, поэтому при обращении по индексу происходит порча памяти и левая ошибка (a:=CPPoint.Items[AIndex];).

Проверку можно включить в настройках проекта -- см опцию range checking (project options -- compiling).
...
Рейтинг: 0 / 0
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
    #39696285
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Компилируется, просто забыл удалить в примере для форума.
JaDi,
Но ведь в дебагере при наведении мыши или выставлении Watch на интересующий элемент я вижу всю структуру - нули на Double и '' на string
...
Рейтинг: 0 / 0
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
    #39696287
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2K,

когда память испорчена, то даже стандартные функции могут левые ошибки выдавать (причем это может быть даже в совершенно другом месте кода, как повезет). Собственно, "левые ошибки" -- это первый признак того, что где-то есть обращение по левому индексу, к несозданному объекту или повторное уничтожение.
...
Рейтинг: 0 / 0
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
    #39696288
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi,

Спасибо, пойду рыть дальше
...
Рейтинг: 0 / 0
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
    #39696293
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ларчик открывался просто и глупо (мой косяк):
на leToolSettingsFact (TlabeledEdit) было прописано событие OnChange в котором выполнялась функция StrToFloat(leToolSettingsFact.Text) и запись значения в элемент записи.
А дебагер показывал ошибку в другой точке (следующем шаге).


Пятница :) Пора домой...

Всем спасибо за участие!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]