Текущий архив: 2006.01.01;
Скачать: CL | DM;
Вниз
Десятичная точка Найти похожие ветки
← →
kreyl (2005-12-13 01:06) [0]Подскажите, пожалуйста, как быть с преобразованием строковых данных вида "1.0", "4.5" и т.п. в число? FloatToStr прекрасно работает, если в региональных установках винды десятичным знаком указана точка. А на другой винде, где десятичный знак - запятая, не работает.
Строковые данные менять нельзя.
Как устранить проблему? Заранее спасибо.
← →
FloatToStr (2005-12-13 01:24) [1]
procedure TForm1.FormCreate(Sender: TObject);
var s,s1:string; i,k:real;
begin
s:="1.01";
if pos(".",s)>0 then
begin
insert(",",s,pos(".",s));
delete(s,pos(".",s),1);
end;
i:=strtofloat(s);
caption:=floattostr(i);
end;
← →
Джо © (2005-12-13 01:26) [2]DecimalSeparator := твой разделитель.
← →
Alexander Panov © (2005-12-13 01:34) [3]>FloatToStr (13.12.05 01:24) [1]
Лучше DestFloat := StrToFloat(StringReplace(StringReplace(SrcStr, ".", DecimalSeparator,[]),",",DecimalSeparator,[]));
← →
Джо © (2005-12-13 01:45) [4]
> [3] Alexander Panov © (13.12.05 01:34)
> [1] FloatToStr (13.12.05 01:24)
А зачем вы так мучаетесь?
Просто установить DecimalSeparator в точку при старте программы и FloatToStr будет автоматически переводит числа "1.0", "4.5" независимо от настроек системы.
← →
Alexander Panov © (2005-12-13 07:28) [5]>Джо © (13.12.05 0 1:45) [4]
Так у меня, например, числа в строковом виде чаще всего поступают из внешних систем, с других компьютеров -)
← →
Anatoly Podgoretsky © (2005-12-13 08:40) [6]Джо © (13.12.05 01:45) [4]
Это не мучение, а правильный подход.
DecimalSeparator это глобальная переменная, не потоко безопасная и работает только внутри Дельфи, а функции могут использоваться и из АПИ, поэтому это более безопасный и более гарантируемый путь.
← →
Плохиш © (2005-12-13 11:34) [7]
> Джо © (13.12.05 01:45) [4]
> А зачем вы так мучаетесь?
> Просто установить DecimalSeparator в точку при старте программы
Мучения начнутся после того, как вындовс сообщит всем приложениям о необходимости обновить локальные настройки ;-)
← →
Игорь Шевченко © (2005-12-13 11:44) [8]На работу StrToFloat влияют только переменные DecimalSeparator и т.п.
смотреть можно в ffmt.asm.
Поэтому установка DecimalSeparator в требуемое значение перед преобразованием решает проблему.
← →
Anatoly Podgoretsky © (2005-12-13 13:09) [9]Игорь Шевченко © (13.12.05 11:44) [8]
Не решает, это глобальная переменная, со всеми вытекащими от сюда проблемами, будут они у него или нет другой вопрос.
Страницы: 1 вся ветка
Текущий архив: 2006.01.01;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.009 c