Page 1 of 1

StrToFloat

Posted: 22.02.2010 16:36
by Insulin
пытаюсь преобразовать числа которые выдираю из стринга в численное значение.

Имеем скрипт:

Code: Select all

var  
b : TStringList;
bb, s: String; 
a: Extended;

  
  
Begin
  b := TStringList.Create; 
  setsilentmode(false);
  GetGumpTextLines(GetGumpsCount-1,b); 
  
  SetGlobal('stealth','TestVar1',b.Strings[309]); 
  s:=GetGlobal('stealth','TestVar1'); 
  AddToSystemJournal(s);

  bb:=(b.Strings[309])
  If (BMSearch(0, bb, 'Amount') > 0) Then Delete(bb, Pos('Amount', bb), 14); 

  //a:=StrToInt(bb);  
  
  a:=StrToFloat(bb);
  
  if (a > 1) then
  Begin
  AddToSystemJournal('!');

  End;
Который однако вылетает с ошибкой

Code: Select all

15:27:50 [EVILORD]: Exception: Invalid float at 0.625
15:27:50 [EVILORD]: Script test.sc stopped successfuly
15:31:26 [EVILORD]: Character EVILORD Disconnected.
где я допустил промах? И почему ему не нравится число "21,77" которое я ему пытаюсь скормить :)

Posted: 22.02.2010 23:58
by SaNeK
Вот глянь сдесь. http://www.delphibasics.ru/StrToFloat.php
И опять же, ты в журнал выводил значеничение товей bb? Что говорит? )
Ты точно уверен что у тебя ошибка именно в этой строке?
Пробывал перевести придуманное тобою текстовое сообщение?

Вот вижу ты задал s:=GetGlobal... и вывел в журнал, что оно тебе показало? Если значение выдало правильно то использовать bb и нет смысла. Вот эту s и используй уже.

Емн, тут еще кое что ) Я глянул список фу-ий стелсы и нашел в нем только вот это function FloatToStrF Так что вот такие дела )

Re: StrToFloat

Posted: 23.02.2010 3:59
by WladL
Insulin wrote: И почему ему не нравится число "21,77" которое я ему пытаюсь скормить :)
Быть может потому , что ему больше нравится "21.77" ?
На будующее, добавлены в стелс такие функции как
TryStrToFloat, StrToFloatDef чтоб можно было избегать подобных проблем.
Ну заодно еще и TryStrToInt...

Posted: 23.02.2010 15:05
by Insulin
начну по порядку:

1. StrToFloat в природе существует, поэтому методом дедукции решил его в стелсе и применить.
2. значение bb равняется

Code: Select all

13:50:35:514 [EVILORD]: bb: 21,77
поэтому более чем уверен что он вылетает в присвоении значения float вот тут

Code: Select all

a:=StrToFloat(bb);
так как весь текст в сообщении я вырезал и оставил только число 21,77 то в принципе должно правильно преобразоваться.

3. вывод: AddToSystemJournal(s); выводит:

Code: Select all

13:50:35:512 [EVILORD]: Amount of CR: 21,77
Которое я потом и обрезаю спереди чтобы осталось только число.
Быть может потому , что ему больше нравится "21.77" ?
думал уже и над этим вариантом, так как в гугле это походу и есть основная проблема с floatom. Пытался использовать

DecimalSeparator := '.';

но стелс такое не знает :), так же устанавливал в системе как сепаратор . а не , правда это тоже не воздействало.

Posted: 23.02.2010 17:13
by Insulin
осознал что сепаратор нихрена не действует в стринге который у меня в наличии поэтому решение данной проблемы

Code: Select all

If (BMSearch(0, bb, ',') > 0) Then Delete(bb, Pos(',', bb), 3); 
просто отрезаю запятую и всё что после неё, так как такая точность мне не нужна. :)