[Delphi 7] Как строку перевести во Float, если...
StrToFloatбинго, типа. Набери в редакторе эту строчку и нажми на ней F1.
Вот собсно процедура:
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;
...
Этот код будет работать в любой локали, а не только в русской.
может надежнее делать так: ?
s := s.Replace('.',DecimalSeparator);
f := StrToFloat(s);
то есть проблема конешно не в том что "не дадут" а просто из StrToFloat вылетит исключение и DecimalSeparator := old_ds; просто не отработает.
может надежнее делать так: ?не сработает, если числа приходят в русском формате, а в проге стоит английская локаль.
сработает, какая бы там локаль не стояла. DecimalSeparator - имеется ввиду CurrentDecimalSeparator из текущей установленной локали
то есть проблема конешно не в том что "не дадут" а просто из StrToFloat вылетит исключениеда. я это имел ввиду в первую очередь. тут проблема конечно решаема , но вот еще возможный проблемный вариант:
соседний тред прерывает наш абортом.
сработает, какая бы там локаль не стояла. DecimalSeparator - имеется ввиду CurrentDecimalSeparator из текущей установленной локалиа подумать?
CurrentDecimalSeparator - будет точка, т.к. текущая локаль - английская.
а числа вводятся с запятой (их так бухгалтер вводит, или из файла какого-то берутся).
в итоге replace заменит точку на точку, но запятую не тронет.
а StrToFloat опять же будет реагировать на точку, а не на запятую.
да. я это имел ввиду в первую очередь. тут проблема конечно решаема , но вот еще возможный проблемный вариант:локаль обычно меняется на тред, а не на все приложение.
соседний тред прерывает наш абортом.
ps
в дельфи возможно исключение из этого разумного правила.
то есть ты хочешь, чтобы прога независимо от способа ввода числе (через точку, через запятую, через знак доллара, через знак чего-нибудь еще) соображала, что ей подсунули флоат и корректно его парсила? прямо какой-то ИИ получается
ты запутался что-ли?
вроде бы все-таки задача стояла такая: формат вводимых чисел жестко задан (в данном случае через точку) и нужно написать прогу, которая будет те самые числа корректно парсить независимо от компа, где она запущена. (на русской или на английской или на какой-нибудь туземской локали)
тебе было подсказано, что хотя твой способ и подходит для начального вопроса, но в качестве универсального надежного решения не годится, о чем и было написано в моем посте (или ты его не читал?)
ps
кстати в исходном сообщении ничего не сказано, что формат жестко заданный (с точкой а не зависит от каких-то внешних факторов.
давай тогда предлагай универсальное правильно работающее везде решение. особенно интересует движок ИИ.
давай тогда предлагай универсальное правильно работающее везде решение.для программы с применением в России я бы твое решение еще дополнил бы заменой запятой на точку
особенно интересует движок ИИ.это стоит много
s := s.Replace(',',DecimalSeparator);
s := s.Replace('.',DecimalSeparator);
f := StrToFloat(s);
ты так, что-ли хочешь?да
Оставить комментарий
kotenok1710
Если в ней записана строчка типа 1.1231223e+001Нужно из неё получить константу типа Float или что-то с чем можно работать.
Есть ли функция какая типа StrToFloat? Собсно сам практически ничего не знаю в делфх.