![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
StrToFloat()
a101081 © (2011-11-12 15:47:00)Здорово всем! У меня вопрос такого плана. Никогда с этим не сталкивался и не могу понять где хоть искать. Вот в чем проблема! У меня есть функция преобразования строки в десятичное число, выглядит она следующим образом:
function StrToFloat2(const S: string):real;
var
i:integer;
begin
if s='' then begin
Result:=-1;
exit;
end;
for I :=1 to Length(S) do
begin
if not (S[I] in ['0'..'9',',']) then begin
Result:=-1;
exit;
end;
end;
Result:=StrToFloat(s);
end;
Все работает (10 компов), но вот на 3-х компьютерах все ровно выдает ошибку плана:
'3,70' is not a valid floating point value.
То есть я уже перевожу строковый формат с запятой...
Вот не могу понять... в чем может быть проблема??? 3,70 - это же типичный REAL... Пробовал менять на точку как разделитель. но тоже самое...
Помогите! Очень надо!!!
Везде системы одинаковые XP (установлены может быть и с разных установочных дисков), но системы Windows XP везде...
Может быть какой библиотеки не хватает???
я (2011-11-12 16:04:00) [41]а по выше приведенной ссылке и читал )
В комментариях Андрей предложил поправку в этой функции. Дело в том, что разделитель целой и дробной частей на разных компьютерах может быть и ',' и '.' - зависит от локальных настроек. Для учёта этого в Delphi существует встроенная константа DecimalSeparator типа Char, принимающая значение символа-разделителя целой и дробной частей. Соответственно, оператор
и еще, между прочим у тебя у внешней функции тип короче, чем у той что приравнивается резалту. функция StrToFloat(S: String): Extended
a101081 (2011-11-12 16:03:00) [42]Да это понятно, вот только я и то и то пробовал... Пофигу...
я (2011-11-12 16:01:00) [43]появилась идея где то я читал на тему того, что в зависимости от настроек винды разделителем целой и дробной части может быть . или ,
уже не помню читал или приснилось, но если идей нет то можно проверить эту )
a101081 (2011-11-12 15:59:00) [44]В том то и дело, что функция будет отсекать левые символы которые не 0...9 и запятая... А если что-то попадется то ответом будет -1!!!
Как такое возможно??? На всех компах работает, но вот на 3 не пашет.... из-за чего?
я (2011-11-12 15:52:00) [45]а понял :-)
я (2011-11-12 15:49:00) [46]я вот не понял, а зачем тебе эта функция? Есть же уже встроенная.
http://www.delphi-manual.ru/work-with-strings.php?com=yes