[Delphi 7] Как строку перевести во Float, если...
StrToFloatбинго, типа. Набери в редакторе эту строчку и нажми на ней F1.
Ок. Там напсано, что StrToFloat может конвертировать строку моего вида в формат float. Только при попытке это сделать, вылезает вот что: 

Вот собсно процедура:
 

Вот собсно процедура:
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text:=IntToStr(i);
tmp2:=StrToFloat(StringGrid1.Cells[1,4]);
end;
если вместо точки поставить запятую, то работает?
 Точно! Спасибо, а то думал с ума сойду тут
  Точно! Спасибо, а то думал с ума сойду тутЕсли надо обязательно точку то надо написать нечто вроде:
Этот код будет работать в любой локали, а не только в русской.
var
old_ds: Char;
...
old_ds := DecimalSeparator;
DecimalSeparator := '.';
flt := StrToFloat(s);
DecimalSeparator := old_ds;
...
Этот код будет работать в любой локали, а не только в русской.
а что если DecimalSeparator используется где-то кем-то еще? а что, если забудешь или не дадут восстановить?
может надежнее делать так: ?
 
может надежнее делать так: ?
s := s.Replace('.',DecimalSeparator);
f := StrToFloat(s);
  +1.
то есть проблема конешно не в том что "не дадут" а просто из StrToFloat вылетит исключение и DecimalSeparator := old_ds; просто не отработает.
 а просто из StrToFloat вылетит исключение и DecimalSeparator := old_ds; просто не отработает.
то есть проблема конешно не в том что "не дадут"
 а просто из StrToFloat вылетит исключение и DecimalSeparator := old_ds; просто не отработает.
 а просто из StrToFloat вылетит исключение и DecimalSeparator := old_ds; просто не отработает.может надежнее делать так: ?не сработает, если числа приходят в русском формате, а в проге стоит английская локаль.
сработает, какая бы там локаль не стояла. DecimalSeparator - имеется ввиду CurrentDecimalSeparator из текущей установленной локали
то есть проблема конешно не в том что "не дадут" а просто из StrToFloat вылетит исключениеда. я это имел ввиду в первую очередь. тут проблема конечно решаема
 , но вот еще возможный проблемный вариант:
, но вот еще возможный проблемный вариант:соседний тред прерывает наш абортом.
сработает, какая бы там локаль не стояла. DecimalSeparator - имеется ввиду CurrentDecimalSeparator из текущей установленной локалиа подумать?
CurrentDecimalSeparator - будет точка, т.к. текущая локаль - английская.
а числа вводятся с запятой (их так бухгалтер вводит, или из файла какого-то берутся).
в итоге replace заменит точку на точку, но запятую не тронет.
а StrToFloat опять же будет реагировать на точку, а не на запятую.
да. я это имел ввиду в первую очередь. тут проблема конечно решаема , но вот еще возможный проблемный вариант:локаль обычно меняется на тред, а не на все приложение.
соседний тред прерывает наш абортом.
ps
в дельфи возможно исключение из этого разумного правила.
а если числа вводяться вообще через жопу? целая часть на одной строке, а дробная в другом файле, да еще и закодирована?!
то есть ты хочешь, чтобы прога независимо от способа ввода числе (через точку, через запятую, через знак доллара, через знак чего-нибудь еще) соображала, что ей подсунули флоат и корректно его парсила? прямо какой-то ИИ получается
ты запутался что-ли?
вроде бы все-таки задача стояла такая: формат вводимых чисел жестко задан (в данном случае через точку) и нужно написать прогу, которая будет те самые числа корректно парсить независимо от компа, где она запущена. (на русской или на английской или на какой-нибудь туземской локали)
то есть ты хочешь, чтобы прога независимо от способа ввода числе (через точку, через запятую, через знак доллара, через знак чего-нибудь еще) соображала, что ей подсунули флоат и корректно его парсила? прямо какой-то ИИ получается

ты запутался что-ли?
вроде бы все-таки задача стояла такая: формат вводимых чисел жестко задан (в данном случае через точку) и нужно написать прогу, которая будет те самые числа корректно парсить независимо от компа, где она запущена. (на русской или на английской или на какой-нибудь туземской локали)
ты че такой нервный? не выспался?
тебе было подсказано, что хотя твой способ и подходит для начального вопроса, но в качестве универсального надежного решения не годится, о чем и было написано в моем посте (или ты его не читал?)
ps
кстати в исходном сообщении ничего не сказано, что формат жестко заданный (с точкой а не зависит от каких-то внешних факторов.
тебе было подсказано, что хотя твой способ и подходит для начального вопроса, но в качестве универсального надежного решения не годится, о чем и было написано в моем посте (или ты его не читал?)
ps
кстати в исходном сообщении ничего не сказано, что формат жестко заданный (с точкой а не зависит от каких-то внешних факторов.
ДаркГрей, ты вроде нормальные вещи в этом разделе пишешь, но сегодня, знаешь, че-то как-то не айс. долго домой с работы ехал?
давай тогда предлагай универсальное правильно работающее везде решение. особенно интересует движок ИИ.
давай тогда предлагай универсальное правильно работающее везде решение. особенно интересует движок ИИ.
давай тогда предлагай универсальное правильно работающее везде решение.для программы с применением в России я бы твое решение еще дополнил бы заменой запятой на точку
особенно интересует движок ИИ.это стоит много

ты так, что-ли хочешь?
s := s.Replace(',',DecimalSeparator);
s := s.Replace('.',DecimalSeparator);
f := StrToFloat(s);
ты так, что-ли хочешь?да
Оставить комментарий
						
			
kotenok1710
Если в ней записана строчка типа 1.1231223e+001Нужно из неё получить константу типа Float или что-то с чем можно работать.
Есть ли функция какая типа StrToFloat? Собсно сам практически ничего не знаю в делфх.