Форум: "Основная";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
Внизпредставление числа в виде строки Найти похожие ветки
← →
McSimm2 (2003-12-02 16:50) [0]Подскажите мастера алгоритм, как реализовать самому функцию inttostr
← →
Smithson (2003-12-02 16:54) [1]посмотри исходники val :))
← →
McSimm2 (2003-12-02 16:58) [2]Smithson © (02.12.03 16:54) [1]
Нет, val тор же не подойдёт, нужно более на "структурном" уровне
function TForm1.GetStr2(ANum : integer):string;
var
stop: Boolean;
por, koef, tmpNum: Integer;
begin
por := round(exp(trunc((ln(ANum)/ln(10))) * ln(10)));
tmpNum := ANum;
result := "";
while tmpNum > 0 do
begin
koef := tmpNum div por;
tmpNum := tmpNum - koef * por;
por := por div 10;
result := result + char(48 + koef);
if por = 0 then
por := 1;
end;
end;
Вот может проще как то можно сделать. Ведь наверняка какие алгоритмы есть ....
← →
Тимохов (2003-12-02 17:01) [3]что это за уровень то такой "структурный"?
← →
McSimm2 (2003-12-02 17:03) [4]Тимохов (02.12.03 17:01) [3]
Да ладно тебе, придираться :)))
Просто не пользуясь никакими колёсами, которые уже изобретены...
← →
Тимохов (2003-12-02 17:05) [5]все-таки непонятно чего ты хочешь.
"структурно" это красивое слово, но в данном контексте (без дополнительных пояснений со стороны автора) не имеет смысла.
← →
han_malign (2003-12-02 17:17) [6]> por := round(exp(trunc((ln(ANum)/ln(10))) * ln(10)));
- где такую траву берешь, что просто div/mod - уже не катит?
← →
McSimm2 (2003-12-03 09:45) [7]Всё тот же перевод из integer в string ...
function TFrm_main.MyIntToStr(AValue: Integer): String;
var
_LengthText: Integer;
_ResultPCharText: PChar;
_ResultStringText, _s: String;
_tempVal, _i, _por: Integer;
function StrPas(const Str: PChar): String;
begin
Result := Str;
end;
const
Pos0 = ord("0");
begin
try
_tempVal := Avalue;
_LengthText := Trunc(ln(_tempVal) / ln(10)) + 1;
GetMem(_ResultPCharText, _LengthText + 1);
Как вот в этом месте записать в переменную
_ResultPCharText нужный адрес, если длина уже сидит в
_LengthText ???
Есть какая нибудь функция ?
Типа
int GetWindowText(
HWND hWnd, // handle of window or control with text
LPTSTR lpString, // address of buffer for text
int nMaxCount // maximum number of characters to copy
);
_ResultPCharText := PChar(_tempVal + Pos0);
_ResultStringText := StrPas(@_ResultPCharText);
Result := _ResultStringText;
finally
FreeMem(_ResultPCharText);
end;
end;
Подскажите пожалуйста...
← →
Slym (2003-12-03 10:27) [8]function IntToStr(i:integer):string;
begin
result:="";
repeat
result:=char(i mod 10+48)+result;
i:=i div 10;
until i=0;
end;
← →
vedmed_ (2003-12-03 10:35) [9]2 Slym: не работает для отрицательных чисел и нуля
мой вариант:
function YetAnotherIntToStr(aVal: Integer): string;
var
lSign: string;
begin
if aVal = 0 then
Result := "0"
else
begin
Result := "";
if aVal < 0 then
begin
lSign := "-";
aVal := -aVal;
end
else
lSign := "";
while aVal > 0 do
begin
Result := Chr((aVal mod 10) + Ord("0")) + Result;
aVal := aVal div 10;
end;
Result := lSign + Result;
end;
end;
его можно оптимизировать предварительно выделив память под результат
← →
Digitman (2003-12-03 10:47) [10]function MyIntToStr(Value: Integer): String;
var
i: Integer;
neg: Boolean;
m: Integer;
begin
i := 11;
Result := StringOfChar(" ", i);
neg := Value < 0;
if neg then Value := -Value;
repeat
Result[i] := Char(Value mod 10 + Ord("0"));
Value := Value div 10;
Dec(i);
until Value = 0;
if neg then Result[i] := "-";
Result := Trim(Result);
end;
← →
Amoeba (2003-12-03 13:07) [11]А зачем в очередной раз понадобилось изобретать велосипед?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c