Ошибка is an invalid float

stkapler

0 / 0 / 0

Регистрация: 07.02.2018

Сообщений: 19

1

05.03.2018, 12:25. Показов 3646. Ответов 6

Метки lazarus, pascal (Все метки)


Студворк — интернет-сервис помощи студентам

и сова мною любимый массив данных. есть массив, в который пользователь вводит числа из головы. нажимается кнопка — в другом массиве эти же числа преподносятся к степени.

и вроде бы все хорошо, числа преподносятся. но иногда кое как и постоянно возникает ошибка:

«проект project 1 вызвал класс исключения «econverterror» с сообщением: » » is an invalid float

по адресу 1000507ba»

код ниже:

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
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
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  a:array[0..9] of real;
  i:integer;
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  for i:=0 to 9 do
      begin
        a[i]:=strtofloat(memo1.lines[i]);
        a[i]:=sqr(a[i]);
        memo2.lines.append(floattostr(a[i]));
      end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  memo1.lines.clear;
  memo2.lines.clear;
end;
 
end.



0



dddoc

9 / 9 / 1

Регистрация: 25.06.2017

Сообщений: 51

05.03.2018, 13:52

2

У тебя, скорее всего, строка в Memo пустая попадается. Попробуй так

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i:=0 to 9 do
  begin
    try
      a[i]:=strtofloat(memo1.lines[i]);
      a[i]:=sqr(a[i]);
      memo2.lines.append(floattostr(a[i]));
    except
      ShowMessage(Format('Ой. Значение memo1.lines[%d] без звездочек равно *%s*',[i,memo1.lines[i]]));
    end;
  end;
end;

ps. Кстати, в Лазаре тип real — псевдоним типа Double, т.е. ты можешь писать так

Pascal
1
a:array[0..9] of Double;



0



0 / 0 / 0

Регистрация: 07.02.2018

Сообщений: 19

05.03.2018, 14:19

 [ТС]

3

тоже самое(

Добавлено через 1 минуту
на этот раз еще и выскочил ассемблер с выделенной строкой

000000010005086A 48c744242000000000 movq $0x0,0x20(%rsp)



0



Модератор

8490 / 5650 / 2290

Регистрация: 21.01.2014

Сообщений: 24,238

Записей в блоге: 3

05.03.2018, 14:30

4

Цитата
Сообщение от stkapler
Посмотреть сообщение

есть массив, в который пользователь вводит числа из головы

А почему Вы тогда жестко ограничиваете пользователя, что он обязан ввести 10 чисел? А если он введет меньше — вы и получите свой вылет…
1. Использовать динамический массив, размер которого будет определяться исходя из количества введенных пользователем чисел
2. Организовать проверку того, что пользователь ввел вообще что-нибудь
3. Организовать проверку того, что пользователь ввел именно число, а не всякую другую шнягу.
Только после этого — формировать массив, обрабатывает его и выводить во второй Мемо.



0



dddoc

9 / 9 / 1

Регистрация: 25.06.2017

Сообщений: 51

05.03.2018, 15:04

5

Цитата
Сообщение от stkapler
Посмотреть сообщение

тоже самое(

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
var
  Form1: TForm1;
  DblArr: array [0..9] of Double;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
    SqrDbl: Double;
begin
  Memo1.Clear;
  Memo2.Clear;
 
  for i := Low(DblArr) to High(DblArr) do
  begin
    DblArr[i]:= Random + Random(10);
    SqrDbl:= sqr(DblArr[i]);
    Memo1.Lines.Add(FloatToStr(DblArr[i]));
    Memo2.Lines.Add(FloatToStr(SqrDbl));
  end;
 
end;

зы. как и советовал D1973, сделай проверку в вводимом контроле на корректность данных перед обработкой (чтобы это было не пустое значение + это был вещественный тип)

Миниатюры

Ошибка при возведении символа строки в степень: " " is an invalid float
 

Вложения

Тип файла: 7z published.7z (57.9 Кб, 1 просмотров)



0



9 / 9 / 1

Регистрация: 25.06.2017

Сообщений: 51

05.03.2018, 15:08

6

Цитата
Сообщение от D1973
Посмотреть сообщение

Использовать динамический массив

для примера вовсе не обязательно. А то он совсем утонет



0



D1973

05.03.2018, 15:09


    Ошибка при возведении символа строки в степень: » » is an invalid float

Не по теме:

Цитата
Сообщение от dddoc
Посмотреть сообщение

А то он совсем утонет

:cry:



0



Topic: invalid float if i use Str()  (Read 2979 times)

I have found an interesting point if i convert with Str().
The following program demonstarte this. It conver a float(exact type double) to a string and the way back is not working, because it raises and EConvertError 0.0000000000000E+000 is an invalid float if you try to convert it back with StrToFloat().

Is this correct that str() produce a wrong string ?!

  1. program Project1;

  2. uses SysUtils;

  3. var

  4.   String1: string;

  5.   Float1, Float2: Double;

  6. begin

  7. writeln(‘Start Testfloat’);

  8.   Float1 := 0.0;

  9.   Str(Float1,String1);

  10. writeln(‘Float 1=<‘+String1+‘>’);

  11.   Float2:= StrToFloat(String1);

  12. end.

BTW. I have found such a similar code in a fpc component :-) This is the reason for my question.


Logged

regards
Andreas


StrToFloat uses the FormatSettings of your system. Many European countries use a comma for the DecimalSeparator — here 0.0000E+00 in fact is an invalid numeric string, it should be 0,0000E+00.

Since StrToFloat (as well as the opposite conversion FloatToStr) has many overloads you can use an adjusted copy of the FormatSettings as last parameter:

  1. function PointStrToFloat(s: String): Double;

  2. var

  3.   fs: TFormatSettings;

  4. begin

  5.   fs := FormatSettings;

  6.   fs.DecimalSeparator := ‘.’;

  7.   Result := StrToFloat(s, fs);

  8. end;

  9. function PointFloatToStr(x: Double): String;

  10. var

  11.   fs: TFormatSettings;

  12. begin

  13.   fs := FormatSettings;

  14.   fs.DecimalSeparator := ‘.’;

  15.   Result := FloatToStr(x, fs);

  16. end;

Str() is an old Pascal function which existed before anybody was thinking of FormatSettings — it always uses a point as decimal separator. Its partner is the «val()» procedure — using it above PointStrToFloat() could be rewritten as

  1. function PointStrToFloat(s: String): Double;

  2. var

  3.   res: Integer;

  4. begin

  5.   val(s, Result, res);

  6. if res <> 0 then

  7. raise EConvertError.Create(‘no valid numeric string’);

  8. end;

 

« Last Edit: January 06, 2020, 10:53:03 am by wp »


Logged


So it is correct, the test fail in fpreport. the problem is this code here

  1. function TFPReportVariable.GetValue: String;

  2. begin

  3. Case DataType of

  4.     rtBoolean  : Result:=BoolToStr(AsBoolean,True);

  5.     rtInteger  : Result:=IntToStr(AsInteger);

  6.     rtFloat    : Str(AsFloat,Result);

  7.     rtCurrency : Str(AsCurrency,Result);

  8.     rtDateTime : Result:=DateTimeToISO8601(AsDateTime);

  9.     rtString   : Result:=AsString

  10. else

  11. Raise EConvertError.CreateFmt(SErrUnknownResultType,[GetEnumName(TypeInfo(TResultType),Ord(DataType))])

  12. end;

  13. end;

it convert float and currency without the actual formatsettings. In the test of the fpreport it is using with formatsetting.

  1. procedure TTestVariable.TestFloat;

  2. Var

  3.   R : TFPExpressionResult;

  4. begin

  5.   Variable.DataType:=rtFloat;

  6.   AssertEquals(‘Float type remains’,rtFloat,Variable.DataType);

  7.   AssertEquals(‘Float default value’,0.0,Variable.AsFloat);

  8.   AssertEquals(‘Float as string’,0.0,StrToFloat(Variable.Value)); // <- EConvertException

  9.   Variable.DataType:=rtBoolean;

  10.   Variable.AsFloat:=1.23;

  11.   AssertEquals(‘Float type remains’,rtFloat,Variable.DataType);

  12.   AssertEquals(‘Float as string’,1.23,StrToFloat(Variable.Value));

  13.   AssertEquals(‘Float value’,1.23,Variable.AsFloat);

  14.   R:=Variable.AsExpressionResult;

  15.   AssertEquals(‘Correct result’,rtFloat,r.resulttype);

  16.   AssertEquals(‘Correct value’,1.23,r.resFloat);

  17.   ExpectException(‘Cannot fetch as other type’,EConvertError);

  18.   Variable.AsString;

  19. end;

I see, converting a float to string and back is not an easy thing.
 


Logged

regards
Andreas


Since a report engine produces output for the application user, I think it should respect the FormatSettings on the user’s machine. Therefore, I consider usage of the Str() function in TFPReportVariable to be a bug (it should be FloatToStr()). Please report it to bugtracker.

There is another issue: I see in TestFloat that FPReport seems to call FPExpressionParser. This formula parser also requires a decimal point separator. I think FPExpressionParser should be generalized to accept any other decimal separator (and list separator etc.) — I did this for FPSpreadsheet, so, it is feasible.

« Last Edit: January 06, 2020, 11:20:33 am by wp »


Logged


It is one of the failed tests in Bugreport 0036519 Link: https://bugs.freepascal.org/view.php?id=36519

The dot/comma problem i have seen with a german csv file and the report too. But i want to have all testst running before i file more Bugs in fpreport. Michael have fixed some other issues in the last days (i discussed something on the mailinglist). 

« Last Edit: January 06, 2020, 12:13:34 pm by af0815 »


Logged

regards
Andreas


Note that the original code provided indicates string as shortstring. That may be the cause.

  1. {$mode delphi}{$H+}

  2. program Project100;

  3. uses SysUtils;

  4. var

  5.   String1: string;

  6.   Float1, Float2: Double;

  7. begin

  8. writeln(‘Start Testfloat’);

  9.   Float1 := 0.0;

  10.   Str(Float1,String1);

  11. writeln(‘Float 1=<‘+String1+‘>’);

  12.   Float2:= StrToFloat(String1);

  13. end.

This works, because of {$H+}.
str() itself otherwise defaults to shortstring, but it does support AnsiString as well, provided you know what string type you are using : {$H+}

That bug report makes the same — wrong — assumption.

« Last Edit: January 06, 2020, 12:15:56 pm by Thaddy »


Logged

I actually get compliments for being rude… (well, Dutch, but that is the same)


I think you are on a english configured machine :-) there it will be work. I have a german machine :-( and there it fails.


Logged

regards
Andreas


I think you are on a english configured machine :-) there it will be work. I have a german machine :-( and there it fails.

I also test on «German», since the Dutch language requires about the same . Plz follow my advice above: make sure your string type is correct and consistent.

« Last Edit: January 06, 2020, 12:20:49 pm by Thaddy »


Logged

I actually get compliments for being rude… (well, Dutch, but that is the same)


I don’t see what shortstring or ansistring have to do with the decimal separator. The test project running with a comma separator fails no matter whether the variable «string1» is an AnsiString or a ShortString:

  1. program Project100;

  2. uses

  3.   SysUtils;

  4. var

  5.   String1: string[255];

  6. //  String1: string;

  7.   Float1, Float2: Double;

  8. begin

  9.   FormatSettings.DecimalSeparator := ‘,’;

  10. writeln(‘Start Testfloat’);

  11.   Float1 := 0.0;

  12.   Str(Float1,String1);

  13. writeln(‘Float 1=<‘+String1+‘>’);

  14.   Float2:= StrToFloat(String1);

  15. end.  


Logged


Tested with the advice from Thaddy -> the same error.

You can test it in the full context, if you run the unittests (trunk) from fpc/packages/fcl-report/test/testfpreport.lpr or fpc/packages/fcl-report/test/guitestfpreport.lpr

The test TTestVariable.TestFloat is the correct one for this thread.


Logged

regards
Andreas


I don’t see what shortstring or ansistring have to do with the decimal separator. The test project running with a comma separator fails no matter whether the variable «string1» is an AnsiString or a ShortString:

And it does so also in Delphi (Dutch locale), as one would expect.

Bart


Logged



Logged

regards
Andreas


TDBEdit — » is an invalid float

Модератор: Модераторы

TDBEdit — » is an invalid float

Хочеться прояснить ситуацию с TDBEdit. TDBEdit связан с числовым полем. Если ввести в него число, затем очистить, то при выходе из этого элемента возникает исключение EConvertError: » is an invalid float. Приходится присваивать Null полю в обработчике OnEditingDone:

Код: Выделить всё
if SQLQuery.State in [dsInsert, dsEdit] then
  if DBEdit.Text = '' then
    DBEdit.Field.Value := Null;

Похожая ситуация, если с DBEdit связано поле с типом Дата.

Компоненты используются стандартные.
Lazarus 0.9.30.2 + Firebird.

7bit
новенький
 
Сообщения: 22
Зарегистрирован: 01.10.2011 12:35:52

Re: TDBEdit — » is an invalid float

Сообщение Little_Roo » 25.12.2011 21:47:10

7bit писал(а):TDBEdit связан с числовым полем. Если ввести в него число, затем очистить, то при выходе из этого элемента возникает исключение

Не замечено ни разу :shock:
Использую порядка 300 tdbedit’ов — и в числовых значениях, и в строковых — полет нормальный….
Копайте код.

Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 633
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург



Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16


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

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

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> беру стринг, привращаю в флоат, еррор 

V

   

Опции темы

freenity
Дата 7.9.2006, 21:55 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

Код

if HiWord(WParam) = BN_CLICKED then
               begin

                    GetWindowText(hwndEdit, pchar(numero), 255);
                    resraiz := sqrt(strtofloat(numero));
                    resultado := FloatToStr(resraiz);
                    MessageBox(0,PChar(resultado), 'asd', 0);
               end

в этой части происходит ошибка, когда нажимаю на кнопку, появляется мисаджБокс и говорит что эксэпшн. Что не так? 
numero, resultado : string;
resraiz : float;

Спасибо.

PM MAIL   Вверх
Matematik
Дата 7.9.2006, 22:33 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
***

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

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

Текст ошибки напиши

PM MAIL WWW ICQ   Вверх
Alexeis
Дата 7.9.2006, 22:38 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Амеба
Group Icon

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

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

Разделитель целой и дробной части отличается от требуемого в strtofloat(); 
Он должен совпадать с DecimalSeparator определяющий разделитель из региональных настроек.
Например: 
numero = ‘12.5’ а DecimalSeparator = ‘,’
вот не понимает strtofloat();  такое число.
Проще всего попытатся заменить оба возможных  разделителя на значение указаное в DecimalSeparator
при помощи функции StringReplace (strUtils)

Добавлено @ 22:40 
Matematik, приходится учится телепатии smile

———————

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

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

гениальность идеи состоит в том, что ее невозможно придумать

PM ICQ Skype   Вверх
freenity
Дата 7.9.2006, 22:47 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

Вот текст ошибки:

Цитата
an unhandled exception occured at 0x004014C0:
«» is an invalid float

Это сообщение отредактировал(а) freenity — 7.9.2006, 23:06

PM MAIL   Вверх
Fedia
Дата 7.9.2006, 22:49 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

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

Цитата(alexeis1 @  7.9.2006,  22:38 Найти цитируемый пост)
Разделитель целой и дробной части отличается от требуемого в strtofloat(); 

А ведь ты скорее всего совершенно прав. А я функцию strtofloat в примере не заменил smile
А здесь приводилось решение этой проблемы.

———————

Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…

PM MAIL ICQ   Вверх
freenity
Дата 7.9.2006, 23:08 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

Код

begin
                    GetWindowText(hwndEdit, pchar(numero), 255);

                     if DecimalSeparator = ',' then
                        numero := StringReplace(numero,'.', DecimalSeparator,[rfReplaceAll])
                     else
                        numero := StringReplace(numero,',', DecimalSeparator,[rfReplaceAll]);

                    resraiz := sqrt(strtofloat(numero));
                    resultado := FloatToStr(resraiz);
                    MessageBox(0,PChar(resultado), 'asd', 0);
               end

Добавил, все равно та же ошибка

PM MAIL   Вверх
Fedia
Дата 7.9.2006, 23:19 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

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

Что содержит переменная numero перед строкой

Код

resraiz := sqrt(strtofloat(numero));

 ? Посмотри в пошаговом режиме.

———————

Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…

PM MAIL ICQ   Вверх
Alexeis
Дата 7.9.2006, 23:21 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Амеба
Group Icon

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

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

freenity, все намного проще  smile 
Ситуация вот такая!

Код

var
  resraiz           : Double;
  resultado, numero : AnsiString;

begin
  numero := ''; //имитирует получение пустой строки от GetWindowText(hwndEdit, pchar(numero), 255);
  resraiz := sqrt(strtofloat(numero));
  resultado := FloatToStr(resraiz);
  MessageBox(0, PChar(resultado), 'asd', 0);

Просто функция GetWindowText(hwndEdit, pchar(numero), 255); — возвращает пустую строку
Попробуйте мой код — он дает ту же ошибку smile

———————

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

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

гениальность идеи состоит в том, что ее невозможно придумать

PM ICQ Skype   Вверх
freenity
Дата 8.9.2006, 00:59 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

Fedia
numero это то что копируется с EditClass ‘a, там должен быть номер.

GetWindowText не возвращает пустую строку, попробывал мисаджем сразау после getwindowtext ошибка точно здесь: 
resraiz := strtofloat(numero);

PM MAIL   Вверх
volvo877
Дата 8.9.2006, 01:13 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Комодератор
Сообщений: 2072
Регистрация: 15.11.2004

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

freenity, тебя просили сказать, 

Цитата(Fedia @  7.9.2006,  23:19 Найти цитируемый пост)
Что содержит переменная numero

, в смысле, какое значение… Откуда оно берется — это твои проблемы, и в данном случае — неважно…

или тебе уже не нужна помощь? Телепаты, извини, в отпуске…

Это сообщение отредактировал(а) volvo877 — 8.9.2006, 01:15

PM MAIL   Вверх
Fedia
Дата 8.9.2006, 01:14 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

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

Цитата(freenity @  8.9.2006,  00:59 Найти цитируемый пост)
numero это то что копируется с EditClass ‘a, там должен быть номер.

Должен быть — это не ответ на мой вопрос. Посмотри точно, какое значение содержит переменная numero перед выполнением:

Код

resraiz := strtofloat(numero);

———————

Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…

PM MAIL ICQ   Вверх
Alexeis
Дата 8.9.2006, 01:18 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Амеба
Group Icon

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

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

Цитата(freenity @  7.9.2006,  22:47 Найти цитируемый пост)
Цитата

an unhandled exception occured at 0x004014C0:
«» is an invalid float

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

возможно нельзя передавать возвращаемый параметр ввиде pchar(numero)
поскольку функция вернет не string, а PChar, а его то нужно сконвертировать в string,
а потому лучше передать PChar, так Delphi сможет сгенерировать правельный код для конвертации PChar в sting при передаче PChar в качестве параметра в strtofloat()

Добавлено @ 01:20 
Кстати под numero выделена хоть память на длину 255 символов?

Добавлено @ 01:24 
Конечно!

Цитата
GetWindowText Function

Parameters

hWnd
[in] Handle to the window or control containing the text. 
lpString
[out] Pointer to the buffer that will receive the text. If the string is as long or longer than the buffer, the string is truncated and terminated with a NULL character. 
nMaxCount

[in] Specifies the maximum number of characters to copy to the buffer, including the NULL character. If the text exceeds this limit, it is truncated. 

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

———————

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

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

гениальность идеи состоит в том, что ее невозможно придумать

PM ICQ Skype   Вверх
Fedia
Дата 8.9.2006, 01:41 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

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

Цитата(alexeis1 @  8.9.2006,  01:18 Найти цитируемый пост)
an unhandled exception occured at 0x004014C0:»» is an invalid float

Блин, я и не заметил, что он отредактировал этот постинг smile

Цитата(alexeis1 @  8.9.2006,  01:18 Найти цитируемый пост)
нужен указатель на выделеный буфер, а не пустой указатель, вот ничего и не копируется.

Если человек не может сказать, какое значение содержится в переменной, то маловероятно, что это ему поможет.

alexeis1, молодец  smile

———————

Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…

PM MAIL ICQ   Вверх
freenity
Дата 8.9.2006, 01:58 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

Спасибо заработало  smile

Это сообщение отредактировал(а) freenity — 8.9.2006, 02:06

PM MAIL   Вверх



















Ответ в темуСоздание новой темы
Создание опроса
Правила форума «Delphi: Общие вопросы»
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

 

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

Hi my Question is simple, i get an invalid float type everytime.

Please Check my Code snippet!

String v2 = OBJParser.v.toString();
    String faces2 = OBJParser.faces.toString();

    float vertices[] = { Float.valueOf(v2) };


    /** The initial texture coordinates (u, v) */   
    float texture[] = { Float.valueOf(v2) };

    /** The initial indices definition */   
    byte indices[] = { Byte.valueOf(faces2) };


    public TDModel() {

        //
        ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length * 4);
        byteBuf.order(ByteOrder.nativeOrder());
        vertexBuffer = byteBuf.asFloatBuffer();
        vertexBuffer.put(vertices);     // <--- Invalid Float
        vertexBuffer.position(0);

        //
        byteBuf = ByteBuffer.allocateDirect(texture.length * 4);
        byteBuf.order(ByteOrder.nativeOrder());
        textureBuffer = byteBuf.asFloatBuffer();
        textureBuffer.put(texture);     // <--- Invalid Float
        textureBuffer.position(0);  

    }

And Here is my LogCat:

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.objLoader/com.example.objLoader.ObjLoaderApp}: 
java.lang.NumberFormatException: Invalid float: "[6.083834, 0.0, 6.083834, -6.083834, 0.0, 6.083834, 6.083834, 0.0, -6.083834, -6.083834, 0.0, -6.083834, 0.89693, -0.116701, -1.078061, 0.736314, -0.076033, 1.066762, -1.052088, -0.0646, 0.954513, -0.692441, -0.114299, -0.835835, 1.303753, 1.083753, -1.023542, 0.444005, 1.032712, 1.513821, -1.019775, 1.17495, 1.105961, -0.681862, 1.180458, -1.481573, 1.045407, -0.157597, -0.147996, 0.067265, -0.072713, -0.783522, 1.200361, 0.538245, -1.221685, -0.154563, -0.1145, 1.228987, 1.155268, 0.478039, 1.381585, -1.094633, -0.254018, -0.118459, -1.64806, 0.452009, 0.853586, -1.185727, 0.481559, -1.133555, 0.975431, 1.246559, 0.047895, 0.105258, 1.12682, -1.585067, -0.344848, 1.15238, 1.73, -1.177093, 1.303243, 0.009798, -0.015789, -0.312706, -0.060242, 0.046107, 1.351565, -0.25373, 1.175182, 0.692469, 0.169032, 0.260077, 0.45264, 1.365451, -1.648881, 0.429819, -0.064031, -0.199824, 0.33682, -1.536424, 1.008866, -0.126459, 0.470257, -0.321458, -0.060305, -0.702046, 1.385825, 0.807576, -1.181814, -0.537873, -0.057997, 1.154378, 0.936321, 0.677546, 1.426494, -0.862364, -0.219203, -0.537108, -1.281588, 0.883991, 1.218077, -0.974527, 0.926074, -1.431442, 0.808457, 1.346412, 0.902078, -0.174992, 1.147173, -1.801163, -0.610285, 1.147948, 1.327881, -1.356023, 1.245036, -0.716849, 1.042022, -0.190494, -0.637866, 0.468949, -0.142859, -1.026806, 1.081272, 0.175115, -1.287556, 0.243586, -0.141476, 1.191072, 1.014587, 0.183491, 1.312948, -1.155731, -0.217847, 0.459469, -1.571341, 0.110279, 0.770709, -1.063276, 0.074521, -1.015607, 1.231954, 1.216866, -0.594471, 0.770454, 1.122192, -1.299703, -0.065279, 1.102928, 1.796044, -1.17643, 1.281231, 0.64638, -0.476225, -0.274043, -0.03739, 0.480423, -0.312115, -0.11106, 0.172793, -0.188473, -0.53246, -0.106274, -0.274351, 0.595963, -0.19801, 1.36038, 0.630818, 0.062998, 1.276304, -0.994314, 0.611501, 1.352344, -0.29078, -0.603343, 1.343584, -0.011276, 1.267461, 0.63073, 1.008356, 1.267107, 0.600208, -0.689727, 1.268899, 0.241091, -0.063884, 1.050912, 1.068503, 0.197512, -1.04357, 0.402928, 1.289593, 0.667029, 0.439932, 1.448684, -0.13512, 0.156677, 1.50502, -0.06687, 0.65206, 1.602193, -1.759897, 0.319614, -0.724614, -1.646483, 0.462612, 0.459024, -1.548443, -0.153801, -0.255587, -1.483055, 1.068517, 0.04533, -0.775458, 0.497559, -1.402503, 0.556317, 0.449266, -1.496503, 0.153226, 0.839249, -1.83223, -0.180515, 0.060946, -1.233899, -0.63092, -0.226328, 0.592326, -0.677921, 1.329703, 0.698183, 1.11593, 1.067893, 0.980967, -0.944509, 0.743625, 1.392342, -1.71944, 0.916506, -0.699776, -0.751048, 0.149059, -1.123006, -0.359688, -0.219676, -0.596748, 0.548058, -0.284113, -0.657622, 0.383454, -0.298149, 0.53317, 0.342781, 1.370886, 0.863692, 0.801564, 1.333314, -0.716665, -0.544178, 1.290048, -0.889409, 1.347667, 0.189763, 0.746821, 1.323792, 0.127379, -0.85606, 1.423543, 0.897206, -0.707035, -0.706694, 0.190636, 1.346937, 0.494274, 0.153436, 1.399456, 0.524189, 0.69141, 1.410453, -1.346437, -0.078697, -0.808084, -1.55038, 0.033513, 0.487642, -1.434319, 1.0171, 0.746778, -0.263198, 0.91678, -1.716774, 0.802037, 0.850318, -1.528586, 0.512712, 0.114694, -1.198383]"

Edited Code:

Float[] vertices = OBJParser.v.toArray(new Float[OBJParser.v.size()]);

    /** The initial texture coordinates (u, v) */   
    Float[] texture = OBJParser.v.toArray(new Float[OBJParser.v.size()]);

    /** The initial indices definition */   
    Float[] indices = OBJParser.faces.toArray(new Float[OBJParser.faces.size()]);


    public TDModel() {

        //
        ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length * 4);
        byteBuf.order(ByteOrder.nativeOrder());
        vertexBuffer = byteBuf.asFloatBuffer();

        for (float verticesFloat : vertices){
            vertexBuffer.put(verticesFloat);
        }
        vertexBuffer.position(0);

        //
        byteBuf = ByteBuffer.allocateDirect(texture.length * 4);
        byteBuf.order(ByteOrder.nativeOrder());
        textureBuffer = byteBuf.asFloatBuffer();

        for (float textureFloat : texture){
            textureBuffer.put(textureFloat);
        }

        textureBuffer.position(0);  

    }

Same LogCat Error:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.objLoader/com.example.objLoader.ObjLoaderApp}: java.lang.NumberFormatException: Invalid float: "[1.0, 0.0, 2.0, 1.0, 2.0, 3.0, 78.0, 33.0, 6.0, 78.0, 6.0, 47.0, 79.0, 53.0, 10.0, 79.0, 10.0, 40.0, 80.0, 38.0, 9.0, 80.0, 9.0, 34.0, 81.0, 40.0, 10.0, 81.0, 10.0, 36.0, 82.0, 41.0, 11.0, 82.0, 11.0, 37.0, 83.0, 31.0, 7.0, 83.0, 7.0, 49.0, 84.0, 54.0, 17.0, 84.0, 17.0, 35.0, 85.0, 55.0, 24.0, 85.0, 24.0, 56.0, 86.0, 45.0, 15.0, 86.0, 15.0, 57.0, 87.0, 58.0, 22.0, 87.0, 22.0, 52.0, 88.0, 59.0, 25.0, 88.0, 25.0, 60.0, 89.0, 41.0, 23.0, 89.0, 23.0, 61.0, 90.0, 62.0, 16.0, 90.0, 16.0, 46.0, 91.0, 63.0, 26.0, 91.0, 26.0, 64.0, 92.0, 50.0, 20.0, 92.0, 20.0, 65.0, 93.0, 66.0, 18.0, 93.0, 18.0, 48.0, 94.0, 67.0, 27.0, 94.0, 27.0, 68.0, 95.0, 52.0, 22.0, 95.0, 22.0, 69.0, 96.0, 70.0, 19.0, 96.0, 19.0, 49.0, 97.0, 71.0, 28.0, 97.0, 28.0, 72.0, 98.0, 53.0, 23.0, 98.0, 23.0, 73.0, 99.0, 74.0, 19.0, 99.0, 19.0, 37.0, 100.0, 75.0, 29.0, 100.0, 29.0, 76.0, 101.0, 43.0, 13.0, 101.0, 13.0, 77.0, 54.0, 78.0, 47.0, 54.0, 47.0, 17.0, 24.0, 57.0, 78.0, 24.0, 78.0, 54.0, 57.0, 15.0, 33.0, 57.0, 33.0, 78.0, 58.0, 79.0, 40.0, 58.0, 40.0, 22.0, 25.0, 61.0, 79.0, 25.0, 79.0, 58.0, 61.0, 23.0, 53.0, 61.0, 53.0, 79.0, 62.0, 80.0, 34.0, 62.0, 34.0, 16.0, 26.0, 65.0, 80.0, 26.0, 80.0, 62.0, 65.0, 20.0, 38.0, 65.0, 38.0, 80.0, 66.0, 81.0, 36.0, 66.0, 36.0, 18.0, 27.0, 69.0, 81.0, 27.0, 81.0, 66.0, 69.0, 22.0, 40.0, 69.0, 40.0, 81.0, 70.0, 82.0, 37.0, 70.0, 37.0, 19.0, 28.0, 73.0, 82.0, 28.0, 82.0, 70.0, 73.0, 23.0, 41.0, 73.0, 41.0, 82.0, 74.0, 83.0, 49.0, 74.0, 49.0, 19.0, 29.0, 77.0, 83.0, 29.0, 83.0, 74.0, 77.0, 13.0, 31.0, 77.0, 31.0, 83.0, 31.0, 84.0, 35.0, 31.0, 35.0, 7.0, 13.0, 56.0, 84.0, 13.0, 84.0, 31.0, 56.0, 24.0, 54.0, 56.0, 54.0, 84.0, 43.0, 85.0, 56.0, 43.0, 56.0, 13.0, 4.0, 42.0, 85.0, 4.0, 85.0, 43.0, 42.0, 12.0, 55.0, 42.0, 55.0, 85.0, 55.0, 86.0, 57.0, 55.0, 57.0, 24.0, 12.0, 30.0, 86.0, 12.0, 86.0, 55.0, 30.0, 5.0, 45.0, 30.0, 45.0, 86.0, 38.0, 87.0, 52.0, 38.0, 52.0, 9.0, 20.0, 60.0, 87.0, 20.0, 87.0, 38.0, 60.0, 25.0, 58.0, 60.0, 58.0, 87.0, 50.0, 88.0, 60.0, 50.0, 60.0, 20.0, 8.0, 51.0, 88.0, 8.0, 88.0, 50.0, 51.0, 21.0, 59.0, 51.0, 59.0, 88.0, 59.0, 89.0, 61.0, 59.0, 61.0, 25.0, 21.0, 39.0, 89.0, 21.0, 89.0, 59.0, 39.0, 11.0, 41.0, 39.0, 41.0, 89.0, 30.0, 90.0, 46.0, 30.0, 46.0, 5.0, 12.0, 64.0, 90.0, 12.0, 90.0, 30.0, 64.0, 26.0, 62.0, 64.0, 62.0, 90.0, 42.0, 91.0, 64.0, 42.0, 64.0, 12.0, 4.0, 44.0, 91.0, 4.0, 91.0, 42.0, 44.0, 14.0, 63.0, 44.0, 63.0, 91.0, 63.0, 92.0, 65.0, 63.0, 65.0, 26.0, 14.0, 32.0, 92.0, 14.0, 92.0, 63.0, 32.0, 8.0, 50.0, 32.0, 50.0, 92.0, 33.0, 93.0, 48.0, 33.0, 48.0, 6.0, 15.0, 68.0, 93.0, 15.0, 93.0, 33.0, 68.0, 27.0, 66.0, 68.0, 66.0, 93.0, 45.0, 94.0, 68.0, 45.0, 68.0, 15.0, 5.0, 46.0, 94.0, 5.0, 94.0, 45.0, 46.0, 16.0, 67.0, 46.0, 67.0, 94.0, 67.0, 95.0, 69.0, 67.0, 69.0, 27.0, 16.0, 34.0, 95.0, 16.0, 95.0, 67.0, 34.0, 9.0, 52.0, 34.0, 52.0, 95.0, 35.0, 96.0, 49.0, 35.0, 49.0, 7.0, 17.0, 72.0, 96.0, 17.0, 96.0, 35.0, 72.0, 28.0, 70.0, 72.0, 70.0, 96.0, 47.0, 97.0, 72.0, 47.0, 72.0, 17.0, 6.0, 48.0, 97.0, 6.0, 97.0, 47.0, 48.0, 18.0, 71.0, 48.0, 71.0, 97.0, 71.0, 98.0, 73.0, 71.0, 73.0, 28.0, 18.0, 36.0, 98.0, 18.0, 98.0, 71.0, 36.0, 10.0, 53.0, 36.0, 53.0, 98.0, 39.0, 99.0, 37.0, 39.0, 37.0, 11.0, 21.0, 76.0, 99.0, 21.0, 99.0, 39.0, 76.0, 29.0, 74.0, 76.0, 74.0, 99.0, 51.0, 100.0, 76.0, 51.0, 76.0, 21.0, 8.0, 32.0, 100.0, 8.0, 100.0, 51.0, 32.0, 14.0, 75.0, 32.0, 75.0, 100.0, 75.0, 101.0, 77.0, 75.0, 77.0, 29.0, 14.0, 44.0, 101.0, 14.0, 101.0, 75.0, 44.0, 4.0, 43.0, 44.0, 43.0, 101.0]"

:) Thanks for your Help! And i hope you will find the error. ;)

private void processVLine(String line){
        String[] tokens=line.split("[ ]+"); //split the line at the spaces
        int c=tokens.length; 
        for(int i=1; i<c; i++){ //add the vertex to the vertex array
            v.add(Float.valueOf(tokens[i]));
        }
    }

in processVLine snippet is the error i allocated him! please help me ;)

Понравилась статья? Поделить с друзьями:
  • Ошибка irql not less or equal как исправить
  • Ошибка irql not less or equal windows 11
  • Ошибка irp фильтра unknown irp
  • Ошибка irlq not less or equal
  • Ошибка ipv4 boot failed