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

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

Перевод из одного типа в другой... [D7, WinXP]


xeron ©   (2006-12-26 15:25:00) 

Всем привет!
В общем такая проблемма...
В моей программе нужно перевести переменную из типа PChar в Double
и обратно...

Я сделал это так:

......
uses
 Windows,
 SysUtils;
......
///Разделителем в числе может быть точка, поэтому заменяем ее запятой.
s := PChar(StringReplace(s, '.', ',', [rfReplaceAll]));
x := StrToFloat(s);
......
s := PChar(FloatToStr(x));
......

Но при использовании SysUtils размер программы увеличивается в несколько раз!
Вопрос:
Как сделать то же самое но без использования SysUtils?


evvcom   (2006-12-28 09:15:00) [1]

> [16] Anatoly Podgoretsky ©   (27.12.06 18:42)
> это регионально не зависимо

Это, видимо, про Val? Кстати, в справке об этом ничего не увидел, а на практике почему-то пользуюсь функциями вида StrToXXX. А так, в обсуждении встречается и Val, и StrToFloat, все уже перемешалось так, что тяжело понять, о какой именно функции идет речь. :)


Anatoly Podgoretsky   (2006-12-27 18:42:00) [2]

> evvcom  (26.12.2006 17:40:12)  [12]

Не стоит, это регионально не зависимо, всегда используется независимый стандарт. (совпадает с американским стандартом).


GrayFace   (2006-12-27 16:00:00) [3]

Хотя, если именно так и нужно, то нормально


GrayFace   (2006-12-27 15:58:00) [4]

>  Str(x:0:2, s);</>
Ужос! Используй StrToFloat.


xeron   (2006-12-26 17:43:00) [5]

Разобрался...

Function StrToNum(s: string): extended;
var
k: dword;
begin
Val(s, Result, k);
if (k > 0) and (s[k] = ',') then
begin
   s[k] := '.';
   Val(s, Result, k);
 end;
end;

Спасибо всем за советы, тема закрыта...


evvcom   (2006-12-26 17:40:00) [6]

> [11] xeron   (26.12.06 17:29)
> Получилось :)

Значит самое время поиграть с [9]

> [10] xeron   (26.12.06 17:06)
> Не понял...

Панель управления -> Язык и стандарты -> Числа -> Разделитель целой и дробной части числа.
Теперь понятно?


xeron   (2006-12-26 17:29:00) [7]

Получилось :)
Function NumToStr(x: extended): PChar;
var
s: String;
begin
 Str(x:0:2, s);
 Result:=PChar(s);
end;

Function StrToNum(s: PChar): extended;
var
Code: integer;
begin
Val(s, Result, Code);
end;

Толко проблемма с символом разделителем...
Допустим если строка 12,5
То при переводе ее в extended получаем 12...
Как быть с этим?


xeron   (2006-12-26 17:06:00) [8]


> И не забудь потом с локальными настройками поиграть :)))


Не понял...


evvcom   (2006-12-26 16:57:00) [9]

> [0] xeron   (26.12.06 15:25)
> s := PChar(StringReplace(s, '.', ',', [rfReplaceAll]));

И не забудь потом с локальными настройками поиграть :)))


Сергей М.   (2006-12-26 16:55:00) [10]


> Это нагон?


Это еще как ?


BiN   (2006-12-26 16:49:00) [11]

А Val чем не устраивает?


xeron   (2006-12-26 16:46:00) [12]


> А с самим "аналогичным"-то разобрался, где там что как и
> почему ? Или и здесь, в дюжине стргок, "запутался" ?


Это нагон?


Сергей М.   (2006-12-26 16:40:00) [13]


> Может вообще на Vcl писать? А че тоже неплохо


Почему бы и нет ? На то VCL и существует.


> Я серьезно


Я тоже не шучу.


> не знаю как перевести обратно


А с самим "аналогичным"-то разобрался, где там что как и почему ? Или и здесь, в дюжине стргок, "запутался" ?


xeron   (2006-12-26 16:32:00) [14]

>и не заморачивался размерами программы

Может вообще на Vcl писать? А че тоже неплохо...

Я серьезно... Помогите плиз...

Вот накопал анологичное...
Function IntToStr(Value: Integer): String; //Included we don't use SysUtils
 Var aSign: Bool;
 Begin
   Result := '';

   aSign := Value >= 0;
   If Not aSign Then Value := -Value;

   Repeat
     Result := Char(Value - (Value Div 10) * 10 + Byte('0')) + Result;
     Value := Value Div 10;
   Until Value = 0;

   If Not aSign Then Result := '-' + Result;
 End;

но не знаю как перевести обратно...


Сергей М.   (2006-12-26 16:03:00) [15]

Вот для этого SysUtils и существует, чтобы тот кто "путается" просто использовал готовые ф-ции из SysUtils и не заморачивался размерами программы


xeron   (2006-12-26 15:46:00) [16]

Пытался... Там СТОЛЬКО кода, я запутался :(


Сергей М.   (2006-12-26 15:30:00) [17]

"Выдрать" из SysUtils к себе в программу только те участки кода, которые реально используются.


Наверх

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