Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Delphi - Format wyświetlanego tekstu z liczby float

13 Nov 2013 08:36 2952 10
  • Level 16  
    Witam
    Mam mały problemik. Mam taki wzór:
    algorytm:integer;
    memo:integer;
    wynik:double; e

    wynik:=((memo*algorytm*1.9)+(memo*78)-(algorytm*2))*14;

    wynik to liczba zmiennoprzecinkowa wiec wynik jest po przecinku często. Wyswietlam to w ten sposób:

    Memo3.Lines.Add(floattostr(wynik));
    ale wynik tego to jest kod i musi być 6 cyfrowy bez miejsc po przecinku więc np jesli wynik będzie:
    wynik= 1236.6 to memo musi wyświetlić 001236
    wynik= 654321.8 memo=654321
    wynik=12.2 memo= 000012

    rozumiecie? musi odcinać a nie zaokrąglać końcówkę i na początku jeśli wynik jest mniejszy noż 100 000 to musi dodawać zera czyli 6 cyfr.
    Jask to rozwiązać? :)
    [30.03.2021, darmowy webinar] Nowoczesna diagnostyka maszyn, monitorowanie i przewidywanie awarii. Zarejestruj się
  • Moderator of Programming
    Dość prosto :) Wypróbuj taki kod :
    Code: delphi
    Log in, to see the code


    Albo w skrócie :
    Code: delphi
    Log in, to see the code
  • Level 16  
    yyy wszystko fajnie ale jak to wrzucić do memo aby tam było wpisywane? :D
  • Moderator of Programming
    Przecież masz ten kod podany u siebie :/
    Code: delphi
    Log in, to see the code
  • Level 16  
    wystarczyło użyć funkcji Int:
    Memo3.Lines.Add(floattostr(Int(wynik)));
    Moderated By arnoldziq:

    Proponuję przeczytać swój własny wątek od początku i rozważyć co się stanie, jeżeli wynik tych obliczeń będzie np. 1.245345.
    Funkcja intostr() czy floattostr() pozostawią tylko cyfrę 1, prawda?
    To po co to całe "6 CYFR W KODZIE'?

  • Moderator of Cars
    ...a nie lepiej po prostu:
    Code:
    writeln(wynik:6:0);

    albo tak (z poprzedzającymi zerami):
    Code:
    Writeln(FormatFloat('000000#',wynik));

    albo jak bardzo chcesz mieć to w zmiennej typu string przed wyświetleniem, to:
    Code: pascal
    Log in, to see the code
  • Moderator of Programming
    Wszystko fajnie, tylko :
    Code: delphi
    Log in, to see the code
    Nie "przytnie" wyniku do 6 cyfr, jeżeli wynik przekroczy 1000000.
    A takie były założenia z pierwszego postu.
  • Moderator of Cars
    Za bardzo się wczytałem w komentarze a za mało w oryginalny post...
    TMEA wrote:
    musi odcinać a nie zaokrąglać końcówkę i na początku jeśli wynik jest mniejszy noż 100 000 to musi dodawać zera czyli 6 cyfr
    Nie ma tam nic o sytuacji kiedy wynik jest dłuższy niż 6 cyfr, jest za to wyraźnie napisane, że ma obcinać ułamek, a nie go zaokrąglać, czyli jak najbardziej konwersja na Int jest wskazana...
  • Level 16  
    koledzy zapomniałem jeszcze powiedzieć, że jest generator, który nie pozwoli aby liczba była większa niż 999999 i mniejsza niż 0. Program jest napisany i generuje kody dla mikroprocesora gdzie mam takie a nie inne wymagania dlatego interesuje mnie tylko funkcja Int i tylko ona odcina miejsca zerowe których mikroprocesor nie widz w związku z napisanym programem. Dodatkowo na początku musialem dopisywać "ręcznie" zera aby kod byl zawsze 6-cio cyfrowy ale już wszystko opanowane i kody z Delphiego programu zgadzają się z kodami z mikroprocesora. Dodatkowo kody z delphiego są generowane do pliku abym wiedział, który kod ma jaką wartość. FormatFloat nie działa tak jak trzeba w moim rozwiązaniu. Wynik nigdy nie wyjdzie 1.23456 a nawet jak wyjdzie to mnie interesuje i mikroprocesor liczba całkowita, ale odpowienie algorytmy pilnują aby liczba nigdy nie spadla poniżej 1000 i nie byla większa niż 999 990 :)
  • User removed account  
  • Level 16  
    floattostr(Int(wynik)) i zadziałało. zamykam temat :)