Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

StrToFloat()


Страницы:   1 2 3

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


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо