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

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

Как преобразовать Real --> String. Ф-ия FloatToStr не катит. [D1, Win95/98]


Страницы:   1 2

fuzzy ©   (2004-12-17 20:11:00) 

Есть другой способ, кроме FloatToStr?


begin...end   (2004-12-18 08:55:00) [1]

Давно так не смеялся над своим кодом ([21]) 8-)

Так несколько лучше:

function MyFloatToStr(FloatValue: Real; Decimals: Byte): String;

function MyIntToStr(Value: Cardinal): String;
begin
  Result := '';
  while Value <> 0 do
  begin
    Result := Chr((Value mod 10) + 48) + Result;
    Value := Value div 10
  end
end;

var
I: Byte;
F: Real;

begin
 F := Abs(Frac(FloatValue));
 for I := 1 to Decimals do
   F := F * 10;
 Result := MyIntToStr(Abs(Trunc(FloatValue))) + '.' + MyIntToStr(Trunc(F));
 if FloatValue < 0 then
   Result := '-' + Result
end.


begin...end   (2004-12-17 22:11:00) [2]

В общем, так. Автора куда-то сдуло, но свой вариант я тут выложу (наложу) :-) Зря извращался, что ли :-)

Про оптимальность просьба не упоминать - сам знаю 8-)

function MyFloatToStr(FloatValue: Real; Decimals: Byte): String;

 function MyIntToStr(Value: Integer): String;
 begin
   Result := '';
   while Value <> 0 do
   begin
     Result := Result + Chr((Value mod 10) + 48);
     Value := Value div 10
   end;
 end;
 
 // Похоже, на встроенную ReverseString надеяться не приходится
 function MyReverseString(Str: String): String;
 var
   L, I: Integer;
 begin
   L := Length(Str);
   SetLength(Result, L);
   for I := 1 to L do
     Result[I] := Str[L - I + 1]
 end;

var
 I: Byte;
 F: Real;

begin
 F := Frac(FloatValue);
 for I := 1 to Decimals do
   F := F * 10;
 Result := MyReverseString(MyIntToStr(Trunc(FloatValue))) + '.' + MyReverseString(MyIntToStr(Trunc(F)))
end.


Decimals - требуемое количество знаков после запятой.

Пошёл спать. Судя по написанному коду, спать действительно пора 8-)


Gero   (2004-12-17 22:02:00) [3]


>  begin...end ©   (17.12.04 22:00)

А, я просто прочитал как:

> Собственно, Str и в Delphi есть...


> Я пробовал... нету.


begin...end   (2004-12-17 22:00:00) [4]

> [18] Gero ©   (17.12.04 21:58)

Так это же он про свой MIDlet Pascal... Или там всё же есть Str, ты в курсе?


Gero   (2004-12-17 21:58:00) [5]


> Fuzzy ©   (17.12.04 20:35)
> Я пробовал... нету.

А обманывать нехорошо.


begin...end   (2004-12-17 21:55:00) [6]

> Fuzzy

Ну и куда ушёл-то? На самом интересном месте :-)


begin...end   (2004-12-17 21:20:00) [7]

> [15] Fuzzy ©   (17.12.04 21:13)

А вот такой код там вообще работает:

var
 R: Real;
 I: Cardinal;
 S: String;
begin
 R := 1234567.890;
 I := Trunc(R);
 S := '';
 while I <> 0 do
 begin
   S := S + Chr((I mod 10) + 48);
   I := I div 10;
 end
end


?

Если в строке S будет '7654321', то не всё потеряно :-)


Fuzzy   (2004-12-17 21:13:00) [8]

Вы правы, надеяться на существование IntToStr в "широком ассортименте" встроенных функций этой программы, было не самой лучшей идеей.

А вот Trunc там есть.


begin...end   (2004-12-17 21:06:00) [9]

> Fuzzy

Ну на наличие IntToStr, я так понимаю, надеяться вообще глупо?


VMcL   (2004-12-17 21:02:00) [10]

> а на Int ругается.

А Trunc?


Fuzzy   (2004-12-17 20:57:00) [11]

Frac и Chr признаёт, а на Int ругается.


begin...end   (2004-12-17 20:48:00) [12]

А функции Int, Frac и Chr есть?


Fuzzy   (2004-12-17 20:40:00) [13]

Документация есть. Только там больше про работу с изображениями написано.


begin...end   (2004-12-17 20:38:00) [14]

> [8] Fuzzy ©   (17.12.04 20:35)

Слушай, ну а документации по этому MIDlet Pascal тоже нету?


Fuzzy   (2004-12-17 20:35:00) [15]

Я пробовал... нету.


begin...end   (2004-12-17 20:33:00) [16]

Собственно, Str и в Delphi есть...


begin...end   (2004-12-17 20:31:00) [17]

> [4] Fuzzy ©   (17.12.04 20:22)

А процедуры Str, как в старом добром Турбо Паскале, там нету? :-)

> Есть только преобразования типа StringToReal, но посмотреть,
> как оно устроено, нет никакой возможности.

А зачем знать, как оно устроено? Разве нельзя попробовать преобразовать и посмотреть на результат?


Fuzzy   (2004-12-17 20:26:00) [18]

Не-е-е. Format('%.2f',[d]) тоже не работает.


Fuzzy   (2004-12-17 20:22:00) [19]

Почему "не катит", я сам не знаю. Есть такая програмка MIDlet Pascal. Pascal для сотовых, т. е. я пишу на паскале, а она компилирует в яву. Дык вот она даже не слышала о таких  "крутых" функциях. Есть только преобразования типа StringToReal, но посмотреть, как оно устроено, нет никакой возможности.


Sergey_Masloff   (2004-12-17 20:17:00) [20]

Естественно:
Format('%.2f',[d])


Страницы:   1 2

Наверх

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