Главная страница
    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-1103016958
Чеширский_Кот
2004-12-14 12:35
2005.01.02
ПРОДАЖНЫЙ ФУТБОЛ: у меня нет слов


1-1103193641
Petrovich2004
2004-12-16 13:40
2005.01.02
Почему Delphi может тормозить систему


14-1103103050
Павел
2004-12-15 12:30
2005.01.02
Не грузится Windows


4-1100149622
hyper_omsk
2004-11-11 08:07
2005.01.02
com и мобильник


3-1102300486
Apophis
2004-12-06 05:34
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский