Formatowanie danych

0

Cześć.
Korzystam z takiej instrukcji do wyświetlania transferu:

LabelMegaBajty.Caption:= 'MegaBajty: ' + FormatFloat('0.0000 MB',(bajty / mega) ); 

Musiałem w niej zadeklarować w FormatFloat cztery miejsca po przecinku gdyby transfer był niski i aby
ten niski transfer był pokazywany po przecinku np. 0.0025 MB
I jest jedno ALE
Ale przy większych transferach niepotrzebnie wyświetlane są miejsca zerowe po przecinku np. 1.5000 MB

  • ładnie by było gdyby było tak: 1.5 MB
    Co wpisać w Format float by nie ograniczało miejsc po przecinku (pokazywane jeśli potrzebne) a chowało niepotrzebne zera po przecinku ) te na końcu wartości) ?
    Proszę o pomoc.
0

Chym, zwykły case nie wystarczy, albo zlepka ifów ?

0

Nie wiem czy mnie dobrze zrozumieliście ?
Chodzi mi o to że jak zadeklaruje w Format float cztery miejsca po przecinku np.

FormatFloat('0.0000 kb',bity / kilo);  

Ro zawsze będą wyświetlane cztery miejsca np.

  1. 1.5648 - to jest ok ponieważ te cztery miejsca zawierają wartości wyższe niż zero
  2. 1.500 - i tu niepotrzebne są te dwa ostatnie zera, mogłoby być 1.5

Właśnie o to chodzi by nie ustalać na stałe ilość miejsc po przecinku, ale by to zrobiła instrukcja i obcinała niepotrzebne zera jeśli wystąpią na końcu liczby.
Mógłbym od razu sam ograniczyć np do dwu zer, ale wtedy mi zaokrągli wynik jeśli liczba będzie długa po przecinku
A ja chcę mieć tak że jeśli ma pokazywać to wszystko bez zaokrąglania, ale nie kosztem pokazywania zer jeśli np. będzie liczba całkowita.
Za pomoc dziękuje z nadzieją na dalszą :)

@pal
na tej stronce nie ma rozwiązania mojego problemu :(

0

A jak ma wyświetlić 1.50004 ?

0
function MozeDaSieInaczejAleJaZrobilemTak(Value : Extended) : string;
begin
  Result := FormatFloat('0.00000', Value);
  while Result[Length(Result)] = '0' do
    Delete(Result, Length(Result), 1);
  if Result[Length(Result)] = DecimalSeparator then
    Delete(Result, Length(Result), 1);
end;

Przykład użycia:

  ShowMessage(MozeDaSieInaczejAleJaZrobilemTak(1.500));

Może być? Mało optymalne, ale to pierwsze na co wpadłem, nie bawiąc się w matematykę.

0
_13th_Dragon napisał(a)

A jak ma wyświetlić 1.50004 ?

Nie tłumaczę dobrze o co mi chodzi ?
Nie chodzi o zera zawierające się w liczbie po przecinku, tylko te niepotrzebne
jeśli bedzie 1.50004 to tak ma być i wtedy po przecinku jest 5 miejsc, dajmy na to zadeklarowałem te 5 miejsc w

 FormatFloat('0.00000 MB',(bajty / mega) ); 

Ale jak będzie transger tylko i 1.5 to wyświeli mi 1.5000
Czyli cztery ostatnie zera są zbędne i zaśmieca mi program.

Dziękuje Olesio
Właśnie ta funkcja jest super, obcina zbędne ostanie zera, a o to mi chodziło.
Tak na boku powiem że kilka lat temu tu byłem stałym bywalcem :)
A potem zająłem się babraniem w Linuksie i nie miałem czasu na Delphi.
Chociaż się przydał - nawyki i zrozumienie tematu się przydały w Bashu :D
Teraz szaleje w Lazarusie i stąd mój powrót.
Dziękuje wszystkim i pozdrawiam.

0

Rozumiem że jak jest np. coś po przecinku to ma zostać np.
1.5000 ma być 1,5
1.0555 ma być 1.0555
2.0000 ma być 2
Jeżeli o to chodzi to tak

FormatFloat('0.#### MB', Value);
0
FormatFloat('0.#### MB', Value);
</quote> O jej jakie to proste :D dzięki kAzek Jeszcze ładnie poproszę i może uzyskam odpowiedź :) ? Jak zrobić by nie deklarować miejsc po przecinku (tu w tym przykładzie są cztery krzyżyki dotyczą czterech miejsc) , ale by FormatFloat sam automatycznie dobierał ilość potrzebnych miejsc po przecinku i jeśli dana cyfra ma ileś tam miejsc po przecinku to by te miejsca były wyświetlane. Domyślnie dałem aż 12 miejsc po przecinku , ale zdarza się ze faktycznie po obliczeniu liczba ma więcej miejsc po przecinku no i mi niepotrzebnie zaokrągla do 12 miejsc. Więc nie chciałbym sam ściśle deklarować , ale by to robiła funkcja wedle potrzeby.
0

Jest jeszcze taka możliwość

Format('%g',[Value])

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