![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как преобразовать Real --> String. Ф-ия FloatToStr не катит. [D1, Win95/98]
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])