![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перевод из одного типа в другой... [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 к себе в программу только те участки кода, которые реально используются.