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

Вниз

Как преобразовать 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.035 c
14-1102221980
Сергей Г
2004-12-05 07:46
2005.01.02
Необычная просьба


1-1103492694
Артем Владимирович
2004-12-20 00:44
2005.01.02
Запись в себя


14-1101324167
Alexander Panov
2004-11-24 22:22
2005.01.02
Победа Януковича. Противостояние.


3-1100425554
Dell3r
2004-11-14 12:45
2005.01.02
Сортировка в DBGrid


3-1101986159
Chery
2004-12-02 14:15
2005.01.02
Стринг - Дата - Максимальное значение.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский