2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Преобразование string в float
Сообщение01.03.2010, 07:40 
Аватара пользователя
В общем подключаю я к проекту файл MS Excel и начинаю считывать данные в переменную типа s : string; Хотя, вообще это числа с запятой. Так что выполняю преобразование
...
var Low : real;
...
Low:= StrToFloat (s);
...
При выполнении выдает ошибку конвертации. Я заметил, что эта функция работает корректно если в строке DecimalSeparator запятая. А в моем файле DecimalSeparator точка. Что делать?

 
 
 
 Re: Преобразование string в float
Сообщение01.03.2010, 09:17 
Присвойте DecimalSeparator другое значение. Глобально или вызвав:
Используется синтаксис Delphi
 function StrToFloat(const S: string; const FormatSettings: TFormatSettings): Extended; overload;

 
 
 
 Re: Преобразование string в float
Сообщение01.03.2010, 09:32 
Аватара пользователя
В общих настройках операционной системы (раздел "языковые параметры") задается, какой символ используется для разделения целой и дробной части. Измените там запятую на принятую в нашей стране точку и в разных программах, которые туда смотрят (в частности майкрософтских) тогда все станет работать правильнее.

 
 
 
 Re: Преобразование string в float
Сообщение01.03.2010, 16:08 
Аватара пользователя
Я, как практик, для получения числа по его строковому представлению, поступаю так: прохожусь по строке, заменяя все запятые на точки, затем пользуюсь функцией Val для преобразования в число (Val понимает только точку).

 
 
 
 Re: Преобразование string в float
Сообщение31.03.2010, 08:09 
Аватара пользователя
worm2 в сообщении #293608 писал(а):
Я, как практик, для получения числа по его строковому представлению, поступаю так: прохожусь по строке, заменяя все запятые на точки, затем пользуюсь функцией Val для преобразования в число (Val понимает только точку).


- да тут прав точно, это наиболее простой вариант, конечно можно ещё так же написать самому функцию перевода = ) из string - > float, хотя тут float не нужен проще single, да и меньше памяти будет съедать = )

 
 
 
 Re: Преобразование string в float
Сообщение01.04.2010, 20:17 
2gdoom
Цитата:
float не нужен проще single

А это разве не одно и то-же? :) Точнее говоря, типа "float" вроде-бы вообще в object pascal'е нет. Вы видимо имели ввиду Real? Тогда да, Real aka Double кушает памяти больше чем Single...

 
 
 
 Re: Преобразование string в float
Сообщение02.04.2010, 08:12 
Аватара пользователя
Circiter в сообщении #305406 писал(а):
2gdoom
Цитата:
float не нужен проще single

А это разве не одно и то-же? :) Точнее говоря, типа "float" вроде-бы вообще в object pascal'е нет. Вы видимо имели ввиду Real? Тогда да, Real aka Double кушает памяти больше чем Single...


нет я имел ввиду delphi

 
 
 
 Re: Преобразование string в float
Сообщение02.04.2010, 08:30 
Напишите функцию, возвращающую числовое значение:

Используется синтаксис Pascal
function valfloat(s: string; var err: integer): extended;
var  i: integer;  x: extended;
begin
  for i:=1 to length(s) do   if s[i]=',' then s[i]:='.';
  Val(s, x, err);    valfloat:=x;
end;

А уж при обращении можно будет записывать результат в вещественную переменную любого размера.

 
 
 
 Re: Преобразование string в float
Сообщение02.04.2010, 08:44 
Если Вы на Delphi пишете, то можно просто (временно) измениить значение разделителя, используемое в программе:
Код:
oldDSep := DecimalSeparator;
DecimalSeparator := ',';
. . . выполняем преобразования
DecimalSeparator := oldDSep;


А еще можно до преобразования все запятые и все точки в преобразуемой строке заменять на DecimalSeparator.
А то, кто его знает, как жизнь повернется: может быть придется запускать Вашу программу на машине, где в качестве разделителя установлена запятая, а данные наоборот придут с точкой.

 
 
 
 Re: Преобразование string в float
Сообщение02.04.2010, 09:18 
Maslov в сообщении #305511 писал(а):
может быть придется запускать Вашу программу на машине, где в качестве разделителя установлена запятая, а данные наоборот придут с точкой.

Вот потому-то процедура Val (с ручной коррекцией) и универсальнее.

 
 
 
 Re: Преобразование string в float
Сообщение02.04.2010, 19:20 
2gdoom
Цитата:
нет я имел ввиду delphi

Я это и имел ввиду, просто раньше говорили Object Pascal. :)

-- Пт апр 02, 2010 22:23:44 --

2Maslov
Цитата:
А еще можно до преобразования все запятые и все точки в преобразуемой строке заменять на DecimalSeparator.

А что если в числе будут использоваться точки для разделения тысячных разрядов (e.g., 1.000.000 aka миллион)?

 
 
 
 Re: Преобразование string в float
Сообщение02.04.2010, 19:44 
Circiter в сообщении #305675 писал(а):
А что если в числе будут использоваться точки для разделения тысячных разрядов (e.g., 1.000.000 aka миллион)?

просто запретить англосаксское уродство

(разве хоть одном матпакете, или хотя бы претендующем на мат, такое предусмотрено?...)

 
 
 [ Сообщений: 12 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group