Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2013, 08:50   #1
romanzi
Пользователь
 
Регистрация: 07.11.2010
Сообщений: 87
По умолчанию StrToFloat

Вот такие вот ошибочки.
Понять не могу в чём дело?
Беру число из сайта.

Всего 3 символа - 0.1

Код:
  if StrToFloat(now) > StrToFloat(user) then
    begin
       button2.Enabled := true;
       button3.Enabled := true;
    end;
Изображения
Тип файла: jpg эрр.jpg (15.0 Кб, 124 просмотров)
Тип файла: png эрр2.png (20.9 Кб, 93 просмотров)
romanzi вне форума Ответить с цитированием
Старый 27.09.2013, 09:06   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

косяк у Вас! Дело в том, что в настройках вашей винды (смотри настройку русской локали) стоит разделитель целой и дробной части [ , ] // запятая.


когда нам понадобилось защититься от этой ситуации (на разных машинах пользователи вводили числа с различными разделителями + разные локальные настройки на клиентских машинах),
то использовали такие "костыли"

Код:
function StrToFloatProtected(s: string) : double;
var repl_char : char;
begin
  if DecimalSeparator = '.' then repl_char := ',' else repl_char := '.';
  StrReplace(S, repl_char , DecimalSeparator, [rfIgnoreCase, rfReplaceAll]);
  StrReplace(S, ' ' , '', [rfIgnoreCase, rfReplaceAll]);
  try
    Result := StrToFloat(S)
  except
    Result := 0;
  end;
end;
p.s. StrReplace - это процедура из JclStrings
можно просто заменить на функцию StringReplace:

Код:
function StrToFloatProtected(s: string) : double;
var repl_char : char;
begin
  if DecimalSeparator = '.' then repl_char := ',' else repl_char := '.';
  s := StringReplace(s, repl_char , DecimalSeparator, [rfReplaceAll, rfIgnoreCase]);
  s := StringReplace(s, ' ' , '', [rfReplaceAll, rfIgnoreCase]);
  try
    Result := StrToFloat(S)
  except
    Result := 0;
  end;
end;

Последний раз редактировалось Serge_Bliznykov; 27.09.2013 в 09:17.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.09.2013, 10:04   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,865
По умолчанию

Флаг rfIgnoreCase тут лишний.
Arigato вне форума Ответить с цитированием
Старый 27.09.2013, 10:41   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Флаг rfIgnoreCase тут лишний.
согласен!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.09.2013, 19:54   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
p.s. StrReplace - это процедура из JclStrings
В новых версиях делфи есть хелпер для строки, там полно подобных методов. Чем-то с# напоминает.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 27.09.2013, 19:59   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

У меня возникло чувство по 2 скрину, что там еще есть пробел, т.е. Вы пытаетесь преобразовать строку "0.1 " в число.
UPD
Проверил - ошибался.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 27.09.2013 в 20:02.
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi: StrToFloat Khayzenberg Помощь студентам 1 31.07.2013 22:28
(Delphi) Ошибка StrToFloat darkduelist Помощь студентам 6 09.12.2012 16:04
StrToFloat и FloatToStr bles Помощь студентам 5 30.01.2008 22:27
Снова StrToFloat sander Общие вопросы Delphi 4 27.09.2007 09:02
StrToFloat nporaMep Общие вопросы Delphi 2 15.12.2006 07:42