Меню

Ошибка is not a valid floating point value

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, unit2, unit3, unit4;
 
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    vt1: TMenuItem;
    N7: TMenuItem;
    procedure N4Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure vt1Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  a, b, n, m, i, j: integer;
  Form1: TForm1;
 
implementation
 
{ uses unit2,unit3,unit4; }
{$R *.dfm}
 
procedure TForm1.N4Click(Sender: TObject);
begin
  form2.show;
end;
 
procedure TForm1.N6Click(Sender: TObject);
begin
  close;
end;
 
procedure TForm1.N5Click(Sender: TObject);
begin
  form3.StringGrid1.rowCount := form2.StringGrid1.ColCount;
  form3.StringGrid1.ColCount := form2.StringGrid2.ColCount;
  form3.show;
end;
 
procedure TForm1.vt1Click(Sender: TObject);
var
  i, j, n, e, f, c: integer;
  z, z1, z2, fun: real;
  k: string;
begin
 
 
  form4.StringGrid1.rowCount := (form2.StringGrid1.ColCount) + 1;
  form4.StringGrid1.ColCount := (form2.StringGrid2.ColCount) + 1;
  for I := 0 to form4.StringGrid1.rowCount - 1 do
    for j := 0 to  form4.StringGrid1.ColCount - 1 do
      form4.StringGrid1.Cells [i,j]:='';
 
  { Подпись фикс. ячеек }
  n := form2.StringGrid2.ColCount;
  for j := 1 to n do
    begin
      k := inttostr(j);
      form4.StringGrid1.cells[j, 0] := 'b[' + k + ']';
    end;
  m := form2.StringGrid1.ColCount;
  for i := 1 to m do
    begin
      k := inttostr(i);
      form4.StringGrid1.cells[0, i] := 'a[' + k + ']';
    end;
  { Заполнение распределительной таблицы }
  e := 1;
  f := 1;
  c := 0;
//  z := 0;
  i := 0;
  j := 0;
  repeat
    z1 := strtofloat(form2.StringGrid1.cells[i, 0]);
    z2 := strtofloat(form2.StringGrid2.cells[j, 0]);
    if z1 < z2 then
      begin
        form4.StringGrid1.cells[f, e] := floattostr(z1);
        form2.StringGrid1.cells[i, 0] := '0';
        z := (z2 - z1);
        form2.StringGrid2.cells[j, 0] := floattostr(z);
        fun := fun + z1 * strtofloat(form3.StringGrid1.cells[f - 1, e - 1]); { Целевая функция }
        i := i + 1;
        e := e + 1;
        c := c + 1;
      end
    else
      begin
        form4.StringGrid1.cells[f, e] := floattostr(z2);
        form2.StringGrid2.cells[j, 0] := '0';
        z := (z1 - z2);
        form2.StringGrid1.cells[i, 0] := floattostr(z);
        fun := fun + z2 * strtofloat(form3.StringGrid1.cells[f - 1, e - 1]); { Целевая функция }
        j := j + 1;
        f := f + 1;
        c := c + 1;
      end;
  until n + m - 1 = c;
 
  { Целевая функция }
  form4.label2.caption := floattostr(fun);
 
  form4.show;
 
end;
 
procedure TForm1.N7Click(Sender: TObject);
var
 // a: array [1 .. 10, 1 .. 10] of real;
  n, m, i, j,  i0, j0: integer;
  min, fun, z1, z2, z: real;
  k: string;
  x, y: set of byte;
begin
  form4.StringGrid1.rowCount := (form2.StringGrid1.ColCount) + 1;
  form4.StringGrid1.ColCount := (form2.StringGrid2.ColCount) + 1;
 
  for I := 0 to form4.StringGrid1.rowCount - 1 do
    for j := 0 to  form4.StringGrid1.ColCount - 1 do
      form4.StringGrid1.Cells [i,j]:='';
  { Подпись фикс. ячеек }
 
  n := form2.StringGrid2.ColCount;
 
  for j := 1 to n do
    begin
      k := inttostr(j);
      form4.StringGrid1.cells[j, 0] := 'b[' + k + ']';
    end;
 
  m := form2.StringGrid1.ColCount;
 
  for i := 1 to m do
    begin
      k := inttostr(i);
      form4.StringGrid1.cells[0, i] := 'a[' + k + ']';
    end;
 
  fun := 0;
 
  repeat
     min := MaxInt;  // изначально ставим максимальное число
    for i := 0 to m - 1 do
      begin { нахождение min }
        if i in x then
          Continue;
        for j := 0 to n - 1 do
          begin
            if j in y then
              Continue;
            if (strtofloat(form3.StringGrid1.cells[j, i]) < min) then
              begin
                min := strtofloat(form3.StringGrid1.cells[j, i]);
                i0 := i;
                j0 := j;
              end;
          end;
      end;
 
    z1 := strtofloat(form2.StringGrid1.cells[i0, 0]);
    z2 := strtofloat(form2.StringGrid2.cells[j0, 0]);
    if (z1 > 0) AND (z2 > 0) then
      begin
        if z1 < z2 then
          begin
            form4.StringGrid1.cells[j0 + 1, i0 + 1] := floattostr(z1);
            form2.StringGrid1.cells[i0, 0] := '0';      // можешь это отключить - не надо
            z := (z2 - z1);
            form2.StringGrid2.cells[j0, 0] := floattostr(z);
            fun := fun + z1 * strtofloat(form3.StringGrid1.cells[j0, i0]); { Целевая функция }
            include(x, i0);   // исключаем строку  при последующем поиске минимального значения
            end;
 
      if z1 > z2 then
          begin
            form4.StringGrid1.cells[j0 + 1, i0 + 1] := floattostr(z2);
            form2.StringGrid2.cells[j0, 0] := '0';           // можешь это отключить - не надо
            z := (z1 - z2);
            form2.StringGrid1.cells[i0, 0] := floattostr(z);
            fun := fun + z2 * strtofloat(form3.StringGrid1.cells[j0, i0]); { Целевая функция }
            include(y, j0);   // исключаем столбец  при последующем поиске минимального значения
            end;
 
      if z1 = z2 then
          begin
            form4.StringGrid1.cells[j0 + 1, i0 + 1] := floattostr(z2); // или z1 - по выбору
            form2.StringGrid2.cells[j0, 0] := '0';              // можешь это отключить - не надо
            z := (z1 - z2);
            form2.StringGrid1.cells[i0, 0] := floattostr(z);
            fun := fun + z2 * strtofloat(form3.StringGrid1.cells[j0, i0]); { Целевая функция }
            include(x, i0);  // исключаем строку  при последующем поиске минимального значения И
            include(y, j0);  // исключаем столбец  при последующем поиске минимального значения
           end;
 
       end
   until    min = MaxInt ;
  { Целевая функция }
  form4.label2.caption := floattostr(fun);
 form4.show;
 
end;
 
end.
  Price:=StrToFloat(Sqls.TSQLs.Create.Get('SELECT Cost FROM TblRoom WHERE 
  RoomType="' + Room + '" AND HotelName = ' + QuotedStr(Hotel),'Cost'));

The Sqls.TSQLs.Create.Get is a function I created to extract a value from the data base.NOTE its in a unit

function TSQLs.Get(SQL: string; value: string): string;
begin
with Databasehub.DataModule1 do
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(SQL);
ADOQuery1.Open;
if (ADOQuery1.RecordCount = 1) then
begin
Result := ADOQuery1.FieldByName(value).AsString;
end;
end;
end;

asked Apr 10, 2020 at 13:28

Umsugi's user avatar

5

Developer should check if the value can be used to calculate price:

tmpStr := Sqls.TSQLs.Create.Get('SELECT Cost FROM TblRoom WHERE RoomType="' + Room + '" AND HotelName = ' + QuotedStr(Hotel),'Cost');
if not TryStrToFloat(tmpStr, Price) then
  Begin
    ShowMessage('be sure that the value exists, window will be closed!');
    Exit;
  End;

Also use sql parameters instead of inserting variables into string.

Andreas Rejbrand's user avatar

answered Apr 10, 2020 at 13:57

sddk's user avatar

sddksddk

1,1031 gold badge10 silver badges20 bronze badges

5

Cost is probably a null value or empty string in the database. If you are using ADO then the DB is probably Sql Server. Use StrToFloatDef to identify these:

Price:= StrToFloatDef(Sqls.TSQLs.Create.Get('SELECT Cost FROM TblRoom WHERE 
RoomType="' + Room + '" AND HotelName = ' + QuotedStr(Hotel),'Cost'), 1000000.00);

Any time it can’t do the conversion it will display 1000000.00, making it obvious that there is an issue — unless hotels really are a million a night.

answered Apr 10, 2020 at 13:50

Tav's user avatar

TavTav

3241 silver badge6 bronze badges

1

 
spogi
 
(2006-08-02 10:45)
[0]

Что означает это сообщения:
 Красный такой круг и внутри белый крестик с надписью —   «Is not a valid floating point value»…

Значит, такая вот программа-база, возможно вводить цифры с 000001 до 999999 в формате /000000/. Можно ввести один номер, напр. 001249, или диапазон номеров напр. 001250-002580. Значить каждый раз когда введем новую цифру, или новый диапазон, проверяется не использовалось ли раньше этот номер или один из номеров диапазона. Проверяю я вот таким образом:

Сама База:
—Поял1—Поля2—…—МинНомер—МаксНомер—Кол-во—ПоляН
— ххх   — ххх   —…— 001250   — 002580     — 1331  — ххх
и т.д.

Беру я каждую запись, проверяю не входит ли туда вводимый мною новый диапазон или какой нибудь один из этих номеров, если да то Прекращаю искать и останавливаюсь, а если нет, беру следующий запись, и т.д. пока не проверю всех записей. После этого добавляю. И работал отлично пока однажды не вышло вот такое сообщение… ПОМОГИТЕ, Спасибо.

И есть ли возможность проделать все это легче?


 
Sergey13 ©
 
(2006-08-02 10:49)
[1]

В каком нибудь из проверяемых полей не то значение (не того типа, может буква вкралась или еще какой знак), которое ожидалось или нет значения вообще.


 
spogi
 
(2006-08-02 11:02)
[2]

Я тоже сперва так подумал, но ищу и не нахожу подобный случай. Записей очень много, но я посмотрел, все таки еще пересмотрю. Но не может ли это быть проблема с перебором записей или какая то еще другая проблема что не дает продолжать проверку? По другому, не перебирая всех записей возможно что-то подобное?


 
Johnmen ©
 
(2006-08-02 11:05)
[3]

Где типы полей?
Где код???


 
Sergey13 ©
 
(2006-08-02 11:07)
[4]

> [2] spogi   (02.08.06 11:02)

При ошибке выведи номер (ключ) записи. В ней и ищи.
Может буква «О» вместо нолика.


 
Sergey13 ©
 
(2006-08-02 11:08)
[5]

> [3] Johnmen ©   (02.08.06 11:05)

Так наверняка поле строковое, а отсыпается на чем нибудь типа StrToInt.
Или мой телепатор можно выбрасывать.


 
spogi
 
(2006-08-02 11:11)
[6]

В коде не должно быть проблема, программа 2 недели работает, а типы поля только Кол-во Integer, все остальные поля Стринговые. Я хотел МинЧисло и МаксЧисло тоже делать Integer или какой другой работающий с цифрами, но было проблема с отоброжением в формате /000000/, поэтому взял оба стринговый и в процедурах, перевожу данные в числовой формат, обрабатываю, потом заного в стринг с форматом /000000/ возвращаю…


 
Desdechado ©
 
(2006-08-02 11:13)
[7]

«Is not a valid floating point value» не сочетается с «в формате /000000/».
Попытка сохранить в поле не целого, а дробного типа.


 
spogi
 
(2006-08-02 11:22)
[8]

Значить, все таки опять придется искать проблему среди записей, просто интересно знаете что, Если ошибка дает в процессе StrToFloat, значить когда-то должно было быть ошибка типа FloatToStr… Беру запись, перевожу в числовой, обрабатываю, перевожу в стринг и сохраняю в базе. А может ли вот как-то ошибочно добавляться запись в ошибочном виде и уже со следующего раза чтоб это стало проблемой???


 
sniknik ©
 
(2006-08-02 11:24)
[9]

> В коде не должно быть проблема, программа 2 недели работает …
нашол тоже показатель… мелкософтский IE вон с 90-какогото года работает и? месяца не проходит без нового патча исправляющего старые глюки…

нет, все проблемы именно в коде, неправильно обрабатываеш тип/неотслеживаеш ввод неподходящих для обработки данных/не учитываеш локализацию/… и т.д. все проблемы кода.


 
Johnmen ©
 
(2006-08-02 11:43)
[10]

Главная ошибка — хранить в символьных полях числовые данные.


 
Desdechado ©
 
(2006-08-02 11:55)
[11]

> Если ошибка дает в процессе StrToFloat, значить когда-то должно было быть ошибка типа FloatToStr
Совсем нет. FloatToStr ошибки перевода не даст, поскольку в строку можно черта лысого запхать, а вот назад….


 
umbra ©
 
(2006-08-02 11:56)
[12]

эта ошибка появляется при работе программы самой по себе или при отладке?


 
spogi
 
(2006-08-02 13:17)
[13]

Дело в том что, я добавлял все новые номера и по ходу суть не изменился, я опять хочу добавлять новые номера или диапазон номеров, только в этот раз не добавляет, и выдает ошибку. Я подумал, вдруг проблема в записе, тогда это проблема та запись, которую я добавил в самом конце, потому что именно после этого и не смог добавить следующую. Нашел этот запись, проверил, нет проблем! :((


 
spogi
 
(2006-08-02 13:19)
[14]


> эта ошибка появляется при работе программы самой по себе
> или при отладке?

Нет, не при отладке, а сама рабочая программа дает ошибку…


 
spogi
 
(2006-08-02 15:00)
[15]

Ну что ее это такое? Я даже унашел и удалил последнюю запись и когда захотел заного добавить ее не получилось, опять ошибки…


 
Lexiy
 
(2006-08-02 17:53)
[16]

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


 
Плохиш ©
 
(2006-08-02 19:27)
[17]

Мой телепатор сказал, что у него поле типа char, а строки содержащие пробелы не являются вещественными/целыми числами.
Варианты решения:
1. Изменить тип поля на varchar
2. Использовать функцию trim, StrToFloat(trim(sValue));


 
Anatoly Podgoretsky ©
 
(2006-08-02 19:46)
[18]

17 сообщений и ноль кода и нет типов полей, образца записей в них
Партизан


 
spogi
 
(2006-08-02 22:55)
[19]

А вот и код … Вообще -то работает, а начало выдавать ошибку…

procedure TNumberInputForm.BitBtn1Click(Sender: TObject);
var
 n:Longint;
 min,max,TbMin,TbMax:Real;
 StrMin,StrMax:String;
 P:Boolean;
 label 10;
begin
 If LabeledEdit3.Text = «0» then Exit;
 P:=False;
 min:=StrToFloat(LabeledEdit3.Text);
 StrMin:=FormatFloat(«000000»,min);
 max:=StrToFloat(LabeledEdit4.Text);
 StrMax:=FormatFloat(«000000»,max);
   If max < min then begin
     ShowMessage(«Max ne mojet bit menshe Min!»);
     Exit;
   end;
 DMod.tbNumbers.MasterSource:=nil;
 DMod.tbNumbers.First;
 If DMod.tbNumbers.RecordCount = 0 then begin
   P:=True;
   goto 10;
 end;
 For n:=1 to DMod.tbNumbers.RecordCount do begin
   TbMin:=StrToFloat(DMod.tbNumbersN_MIN.Value);
   TbMax:=StrToFloat(DMod.tbNumbersN_MAX.Value);

   If (min = TbMin) or  (max = TbMax) then begin P:=False; end;
   If (min < TbMin) and (max > TbMax) then begin P:=False; end;
   If (min > TbMin) and (max < TbMax) then begin P:=False; end;
   If (min < TbMin) and (max < TbMin) then begin P:=True; end;
   If (min > TbMax) and (max > TbMax) then begin P:=True; end;

   If P = False then begin
     ShowMessage(«Vvedennie vami nomera ranshe ispolzovaloas»
                  + #13#10 + «Min i Maks cislo proveryayte, tam oshibka!»);
     DMod.tbNumbers.MasterSource:=DMod.DSFirms;
     Exit;
   end;
   DMod.tbNumbers.Next;
 end;//end for FOR
 DMod.tbNumbers.MasterSource:=DMod.DSFirms;

   10:
 try
   If P = True then begin
     With DMod do begin
       tbNumbers.Edit;
       tbNumbers.Append;
       tbNumbersID_Number.Value:=tbFirmsID_Firm.Value;
       tbNumbersN_Tarix.Value:=StrToDate(MaskEdit1.Text);
       tbNumbersN_Rayon.Value:=DBLookupComboBox1.Text;
       tbNumbersN_FirmaAdi.Value:=tbFirmsF_Adi.Value;
       tbNumbersN_VOEN.Value:=tbFirmsF_VOEN.Value;
       tbNumbersN_Seriya.Value:=LabeledEdit2.Text;
       tbNumbersN_MIN.Value:=StrMin;
       tbNumbersN_MAX.Value:=StrMax;
       tbNumbersN_Count.Value:=StrToInt(LabeledEdit4.Text) — StrToInt(LabeledEdit3.Text) + 1;
       tbNumbersN_Mebleg.Value:=tbNumbersN_Count.Value * tbFirmsF_Qiymet.Value;
       tbNumbersN_VekaletSerNo.Value:=LabeledEdit1.Text;
       tbNumbersN_OdQebzi_MedOrderNo.Value:=LabeledEdit5.Text;
       tbNumbers.Post;
       tbNumbers.Refresh;

       tbFirms.Edit;
       tbFirmsF_Count.Value:=tbFirmsF_Count.Value +
                             StrToInt(LabeledEdit4.Text) —
                             StrToInt(LabeledEdit3.Text) + 1;
       tbFirmsF_Mebleg.Value:=tbFirmsF_Count.Value * tbFirmsF_Qiymet.Value;
       tbFirms.Post;
       tbFirms.Refresh;
     end; //with do begin
   end;   //if p=true
 except
   ShowMessage(«V polyax imeetsya oshibki, proveryayte!»);
   DMod.tbNumbers.MasterSource:=DMod.DSFirms;
 end;//try-except-end
 DMod.tbNumbers.MasterSource:=DMod.DSFirms;
end;


 
sniknik ©
 
(2006-08-02 23:28)
[20]

> А вот и код … Вообще -то работает, а начало выдавать ошибку…
а вот уже и не надо …

затянутая шутка становится не смешной…


 
Mike Kouzmine ©
 
(2006-08-02 23:37)
[21]

TbMin:=StrToFloat(DMod.tbNumbersN_MIN.Value);
  TbMax:=StrToFloat(DMod.tbNumbersN_MAX.Value);


 
Johnmen ©
 
(2006-08-03 09:12)
[22]

Просто интересно, где учат писать такой код?


 
Mike Kouzmine ©
 
(2006-08-03 10:37)
[23]

Johnmen ©   (03.08.06 09:12) [22] Да ладно. Мой первый был такой же.


 
Johnmen ©
 
(2006-08-03 11:54)
[24]


> Mike Kouzmine ©   (03.08.06 10:37) [23]
>
> Johnmen ©   (03.08.06 09:12) [22] Да ладно. Мой первый был
> такой же.

Не верю! (с)   :)))


 
Mike Kouzmine ©
 
(2006-08-03 16:53)
[25]

Johnmen ©   (03.08.06 11:54) [24] Как сейчас помню 1984 год. Правда делфи не было.


 
spogi
 
(2006-08-06 21:49)
[26]


> Просто интересно, где учат писать такой код?

Ну что делать-то? Когда без учителся учишься, получается вот так, странноватый код! :))


Problem

This technote provides a workaround for the Unhandled exception: EDatabase Error: Not a valid floating point value, error that occurs when running a Resource Supply and Demand pivot in IBM® Rational® Portfolio Manager (RPM).

Cause

The full error message:

Unhandled exception: EDatabase Error, '168,00' is not a valid floating point value for field 'fldRESOURCE_CALENDAR'

This issue occurs because the Regional Language Standard and Formats is set to Spanish or other languages whose decimal symbol and digit grouping symbol are not the same as US standard.

This issue has been identified as a product defect and has been logged under APAR PK27911.

Resolving The Problem

To workaround this issue, perform the following:

  1. Click on Start > Control Panel and open Regional and Language Options
  2. Select the Regional Options tab
  3. Under the Standard and Formats update the drop down to display English (United States)

[{«Product»:{«code»:»SSRR2G»,»label»:»Rational Portfolio Manager»},»Business Unit»:{«code»:»BU053″,»label»:»Cloud & Data Platform»},»Component»:»Pivots & Reports»,»Platform»:[{«code»:»PF033″,»label»:»Windows»}],»Version»:»7.0.0.0;7.0.1.1″,»Edition»:»»,»Line of Business»:{«code»:»LOB45″,»label»:»Automation»}}]

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка ip конфигурации что это такое
  • Ошибка ebd на калине