Ошибка is an invalid float

Topic: invalid float if i use Str()  (Read 2982 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


stkapler

0 / 0 / 0

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

Сообщений: 19

1

05.03.2018, 12:25. Показов 3650. Ответов 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



Модератор

8500 / 5659 / 2291

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

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

Записей в блоге: 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



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

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

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


Форум программистов 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: Общие вопросы | Следующая тема »

I’ve been following a lesson on how to constrain images within an activity window and, when I try to apply an aspect ratio of 1:1, the image moves away from it’s original intended location on the activity and up into the left hand corner of the activity as a 0dp x 0dp ImageView.

My code is saying this is an error of "Invalid Float":

app:layout_constraintDimensionRatio="1:1"

This is mysterious to me because the system ALSO tells me that the ratio can be listed as either a FLOAT or a RATIO. Someone tell me I’m not crazy and when I learned ratios as a kid they were separated by a colon.

I’ve removed the ImageViews multiple times and re-added constraints an equal RATIO amount of times. Still, Android Studio doesn’t know what a 1:1 ratio is. The constraint goes as follows:

Top Constraint
+ ImageView1
+ ImageView2
Bottom constraint
app:layout_constraintDimensionRatio="1:1"
Invalid Float

The ImageView is at the top of my activity window as a 0dp x 0dp image.

Cosmin Staicu's user avatar

asked Jul 25, 2019 at 18:48

teej's user avatar

1

It seems that there was a change in the constraint layout implementation.

app:layout_constraintDimensionRatio=»W,661:165″

This does not work any longer. I get the message «Invalid float»

The solution is simple. This parameter now requires a float value. In the above example, all we have to do is to divide 665/165 = 4.006 (We can round the value to 4)

So this line now works as expected:

app:layout_constraintDimensionRatio=»4″

Hope this answer helps.

answered Jun 24, 2020 at 4:26

Nick's user avatar

NickNick

1,3931 gold badge14 silver badges22 bronze badges

This question is totally valid and I couldn’t find an answer for that anywhere else.
The thing is, if you know what is a ratio and read the error carefully you notice that, for some reason, the layout wants you to use a float notation for it.

For example, if you want a ratio of 2:1 you want the width to be two times the height. Therefore you provide the ration like this width/height, since you want it 1 by 1 just put app:layout_constraintDimensionRatio="1" and be happy.

tl;dr: ratio 1:1 = 1/1 = 1 -> app:layout_constraintDimensionRatio="1"

answered Aug 15, 2019 at 19:54

G. Coutinho's user avatar

I am not sure if this is exactly what you are looking for or if helps at all, but here is how I successfully was able to use it for my application. I believe the problem you are having might be the lack of constraints you have on the ImageView you are working with (which is why it might be going towards the top left of the screen). However, I cannot say this with confidence since I cannot see your code. I may be wrong since I am not a professional, but that is my best guess for now.

<ImageView
            android:id="@+id/userPicture"
            android:src="@drawable/user_picture"
            android:contentDescription="Update later"

            android:layout_width="125dp"
            android:layout_height="wrap_content"

            android:layout_marginStart="0dp"
            android:layout_marginEnd="0dp"
            android:layout_marginTop="40dp"
            android:layout_marginBottom="15dp"

            android:scaleType="centerCrop"
            android:adjustViewBounds="true"

            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toTopOf="@id/currentTrackPlayingText"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"

            app:layout_constraintDimensionRatio="1:1" />

This produces the following that is constrained to other aspects of on the screen (Apologies, I do not have enough rep to show the image here).

link to example produced by above

answered Jul 25, 2019 at 19:29

destrada's user avatar

Понравилась статья? Поделить с друзьями:
  • Ошибка irql not less or equal для 8
  • Ошибка irql not less or equal 0x0000000a windows
  • Ошибка irql gt zero at system service windows 10
  • Ошибка irp фильтра unknown irp
  • Ошибка irlq not less or equal