Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.93 c
2-1167913967
Chaval
2007-01-04 15:32
2007.01.21
Проблема с использованием функции GetDriveType


2-1167226205
Mickey74
2006-12-27 16:30
2007.01.21
Какие программы используют мою DLL в данный момент времени?


1-1164731573
Алена
2006-11-28 19:32
2007.01.21
Ttimer


2-1166304928
coxxx
2006-12-17 00:35
2007.01.21
Как программно создать подключению к инету


2-1167746007
Влад
2007-01-02 16:53
2007.01.21
Целый тип 8 байт





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский