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

Вниз

Как преобразовать Real --> String. Ф-ия FloatToStr не катит.   Найти похожие ветки 

 
fuzzy ©   (2004-12-17 20:11) [0]

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


 
begin...end ©   (2004-12-17 20:14) [1]

> fuzzy ©   (17.12.04 20:11)

Что значит "преобразовать"? И почему не катит FloatToStr?


 
Sergey_Masloff   (2004-12-17 20:15) [2]

Format(".2f",[d])

Кстати почему FloatToStr "не катит" ?


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

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


 
Fuzzy ©   (2004-12-17 20:22) [4]

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


 
Fuzzy ©   (2004-12-17 20:26) [5]

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


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

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

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

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

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


 
begin...end ©   (2004-12-17 20:33) [7]

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


 
Fuzzy ©   (2004-12-17 20:35) [8]

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


 
begin...end ©   (2004-12-17 20:38) [9]

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

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


 
Fuzzy ©   (2004-12-17 20:40) [10]

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


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

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


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

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


 
VMcL ©   (2004-12-17 21:02) [13]

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

А Trunc?


 
begin...end ©   (2004-12-17 21:06) [14]

> Fuzzy

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


 
Fuzzy ©   (2004-12-17 21:13) [15]

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

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


 
begin...end ©   (2004-12-17 21:20) [16]

> [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", то не всё потеряно :-)


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

> Fuzzy

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


 
Gero ©   (2004-12-17 21:58) [18]


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

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


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

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

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


 
Gero ©   (2004-12-17 22:02) [20]


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

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

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


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


 
begin...end ©   (2004-12-17 22:11) [21]

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

Про оптимальность просьба не упоминать - сам знаю 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-)


 
begin...end ©   (2004-12-18 08:55) [22]

Давно так не смеялся над своим кодом ([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.



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

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

Наверх




Память: 0.52 MB
Время: 0.053 c
14-1102937903
}|{yk
2004-12-13 14:38
2005.01.02
Станислав Ежи Лец


3-1102000126
yurikon
2004-12-02 18:08
2005.01.02
Запрос не хочет быть "живым"


14-1102806552
123
2004-12-12 02:09
2005.01.02
Как правильно настроить firewall?


14-1103112294
Dmitriy O.
2004-12-15 15:04
2005.01.02
Compact using !


14-1103115368
DimaK
2004-12-15 15:56
2005.01.02
Икноки в стиле XP и картинки на кнопочки в стиле Office2003