IntToStr2

0

Napisałem funkcje która dla argumentu 2 zwraca '02', dla 23 -> '23', 0->'00' (tak jak liczby na zegarku z wyświetlaczem)
Jednak czy Delphi oferuje coś takiego. Próbowałem coś z funkcją format, ale niestety bez efektu. Może zna któś jakieś rozwiązanie, które byłoby lepsze niż pisanie własnej funkcji.
A wygląda ona tak:

function IntToStr2(Value: Integer): string;
begin
Result := IntToStr(Value);
if length(result) = 1 then result := '0' + result;
end;
0

Sczerze mówiąc nie widze żadnego probemu w pisaniu własnej funkcji.
Tym bardziej że ta Twoja nie jest taka długa

0

No tak, ale zawsze to jakaś optymalizacja :D A dlatego pytam, bo różnych konwesji i formatowań stringów w Delphi jest pełno, a nie we wszystkim sie łapię.

0

Raczej czegoś takiego gotowego to nie ma... Ale jak masz funkcję zajmującą dwie linijki kodu, to po kiego grzyba ją jeszcze optymalizować? Nie wykonujesz tej operacji 20000 razy na sekundę, a nie będę mówił ile taka operacja trwa... Jak chcesz mieć bardziej zoptymalizowane, to napisz to w FPC i w postaci kodu ASM wklej do delphi. Będziesz miał optymalizację (ale czy aby na pewno?). Poza tym to wcale nie koniecznie to optymalizacja. Ktos napisał kiedyś funkcję potęgującą 20x szybszą od Delphi'owego Power. Więc zostaw tę funkcję w programie i nie kombinuj. Taka moja rada...

0

Najbardziej uniwersjalna wersja:

Result:=StringOfChar('0',DigitsCount-Length(Result))+Result;

DigitsCount - liczba znaków

0

Ja bym to napisał tak:

function IntToStr2(Value: Integer): string;
begin
if Value<10 then
Result:='0'+IntToStr(Value)
else
Result:=IntToStr(Value);
end;

Wg mnie to powinno działać szybciej (teoretycznie), bo operacja porównania dwóch liczb powinna działać szybciej od length() (tak mi się ptzynajmniej wydaje). Nie spodziewałbym się jednak jakiegoś zauważalnego przyspieszenia, ponieważ wszystkie te operacje wykonują się w ułamku sekundy.

0

Dzięki, przyda się. A ta operacja nie jest wykonywana 20000 razy na sekunde, ale 100 razy na sekundę, więc zawsze to coś.

1 użytkowników online, w tym zalogowanych: 0, gości: 1