Форум: "Основная";
Текущий архив: 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.034 c