2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Преобразование string в float
Сообщение01.03.2010, 07:40 
Аватара пользователя


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

 Профиль  
                  
 
 Re: Преобразование string в float
Сообщение01.03.2010, 09:17 


06/04/09
156
Воронеж
Присвойте DecimalSeparator другое значение. Глобально или вызвав:
Используется синтаксис Delphi
 function StrToFloat(const S: string; const FormatSettings: TFormatSettings): Extended; overload;

 Профиль  
                  
 
 Re: Преобразование string в float
Сообщение01.03.2010, 09:32 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
В общих настройках операционной системы (раздел "языковые параметры") задается, какой символ используется для разделения целой и дробной части. Измените там запятую на принятую в нашей стране точку и в разных программах, которые туда смотрят (в частности майкрософтских) тогда все станет работать правильнее.

 Профиль  
                  
 
 Re: Преобразование string в float
Сообщение01.03.2010, 16:08 
Заслуженный участник
Аватара пользователя


01/08/06
3139
Уфа
Я, как практик, для получения числа по его строковому представлению, поступаю так: прохожусь по строке, заменяя все запятые на точки, затем пользуюсь функцией Val для преобразования в число (Val понимает только точку).

 Профиль  
                  
 
 Re: Преобразование string в float
Сообщение31.03.2010, 08:09 
Аватара пользователя


30/03/10
51
worm2 в сообщении #293608 писал(а):
Я, как практик, для получения числа по его строковому представлению, поступаю так: прохожусь по строке, заменяя все запятые на точки, затем пользуюсь функцией Val для преобразования в число (Val понимает только точку).


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

 Профиль  
                  
 
 Re: Преобразование string в float
Сообщение01.04.2010, 20:17 
Заслуженный участник


26/07/09
1559
Алматы
2gdoom
Цитата:
float не нужен проще single

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

 Профиль  
                  
 
 Re: Преобразование string в float
Сообщение02.04.2010, 08:12 
Аватара пользователя


30/03/10
51
Circiter в сообщении #305406 писал(а):
2gdoom
Цитата:
float не нужен проще single

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


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

 Профиль  
                  
 
 Re: Преобразование string в float
Сообщение02.04.2010, 08:30 
Заслуженный участник


11/05/08
32166
Напишите функцию, возвращающую числовое значение:

Используется синтаксис 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 
Заслуженный участник


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


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

 Профиль  
                  
 
 Re: Преобразование string в float
Сообщение02.04.2010, 09:18 
Заслуженный участник


11/05/08
32166
Maslov в сообщении #305511 писал(а):
может быть придется запускать Вашу программу на машине, где в качестве разделителя установлена запятая, а данные наоборот придут с точкой.

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

 Профиль  
                  
 
 Re: Преобразование string в float
Сообщение02.04.2010, 19:20 
Заслуженный участник


26/07/09
1559
Алматы
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 
Заслуженный участник


11/05/08
32166
Circiter в сообщении #305675 писал(а):
А что если в числе будут использоваться точки для разделения тысячных разрядов (e.g., 1.000.000 aka миллион)?

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

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group