Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.21;
Скачать: CL | DM;

Вниз

Перевод из одного типа в другой...   Найти похожие ветки 

 
xeron   (2006-12-26 15:25) [0]

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

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

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

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


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

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


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

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


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

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


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

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

Может вообще на 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:40) [5]


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


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


> Я серьезно


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


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


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


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


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


Это нагон?


 
BiN ©   (2006-12-26 16:49) [7]

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


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


> Это нагон?


Это еще как ?


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

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

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


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


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


Не понял...


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

Получилось :)
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...
Как быть с этим?


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

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

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

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

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


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

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

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;

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


 
GrayFace ©   (2006-12-27 15:58) [14]

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


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

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


 
Anatoly Podgoretsky ©   (2006-12-27 18:42) [16]

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

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


 
evvcom ©   (2006-12-28 09:15) [17]

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.01.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.049 c
15-1167504687
ProgRAMmer Dimonych
2006-12-30 21:51
2007.01.21
Помогите, пожалуйста, настроить почтовую программу


5-1146937627
w!zard
2006-05-06 21:47
2007.01.21
Значение строки в listbox


15-1167157704
Kolan
2006-12-26 21:28
2007.01.21
Заствки между урвнями Call of Duty


3-1162332175
Vladimir_B
2006-11-01 01:02
2007.01.21
FreeReport утомил


2-1167404864
AndrewEA
2006-12-29 18:07
2007.01.21
связь между ячейками в простой БД