Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

StrToFloat

тут можно задать вопрос по скриптингу
Post Reply
Insulin
Neophyte
Neophyte
Posts: 27
Joined: 22.08.2009 11:37

StrToFloat

Post 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" которое я ему пытаюсь скормить :)
SaNeK
Novice
Novice
Posts: 65
Joined: 08.09.2008 9:52
Contact:

Post by SaNeK »

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

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

Емн, тут еще кое что ) Я глянул список фу-ий стелсы и нашел в нем только вот это function FloatToStrF Так что вот такие дела )
WladL
Apprentice
Apprentice
Posts: 240
Joined: 27.07.2009 17:21
Location: DRW
Contact:

Re: StrToFloat

Post by WladL »

Insulin wrote: И почему ему не нравится число "21,77" которое я ему пытаюсь скормить :)
Быть может потому , что ему больше нравится "21.77" ?
На будующее, добавлены в стелс такие функции как
TryStrToFloat, StrToFloatDef чтоб можно было избегать подобных проблем.
Ну заодно еще и TryStrToInt...
"Как хочешь ты трудись;
Но приобресть не льстись
Ни благодарности, ни славы,
Коль нет в твоих трудах ни пользы, ни забавы. (с) С.Крылов."
Insulin
Neophyte
Neophyte
Posts: 27
Joined: 22.08.2009 11:37

Post 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 := '.';

но стелс такое не знает :), так же устанавливал в системе как сепаратор . а не , правда это тоже не воздействало.
Insulin
Neophyte
Neophyte
Posts: 27
Joined: 22.08.2009 11:37

Post by Insulin »

осознал что сепаратор нихрена не действует в стринге который у меня в наличии поэтому решение данной проблемы

Code: Select all

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