logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

BASCOM jak sie wyswietla zmienną tylko do 1 miejsca po przec

kopernik8 21 Maj 2005 14:13 1877 7
REKLAMA
  • #1 1512778
    kopernik8
    Poziom 21  
    Posty: 631
    Pomógł: 10
    Ocena: 18
    Witam!
    Mam tu taki kawałek kodu:
    
    Dim Tick_time As Single
    Dim Length As Single
    Dim Mps As Integer
    Dim Fps As Integer
    Dim Fff As Single
    Dim Tick_count As Integer
    Dim Czas As Single
    Tick_time = 0.000096
    
    Czas = Tick_count * Tick_time
       Mps = Length / Czas
       Fff = Length / Czas
       Fff = Fff * 10
       Fps = Fff / 3
       Tick_count = 0
    
       Cls
       Lcd Mps
       Lcd " m/s   "
       Lowerline
       Lcd Fps
       Lcd " FPS"
    

    Chodzi mi o to aby wszystko liczyć jak najdokładniej a wyświetlać tylko np 5.3 a nie tak ja to teraz zrobiłem że zapisuje wynik do integera i wyświetla mi zaokrąglone w dół...
  • REKLAMA
  • #2 1513341
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Nie wnikajac w bascoma i jego funkcje - pomnoz wynik przez 10. wtedy ta liczbe (zaokraglana) podzielisz przez 10 i bedziesz mal jeden znak po przecinku.
  • REKLAMA
  • #3 1513415
    shg
    Poziom 35  
    Posty: 2289
    Pomógł: 339
    Ocena: 135
    jak chcesz do 1 miejsca po przecinku, to mnożysz liczbę zmiennoprzecinkową przez 10 (jak do dwóch miejsc, to przez 100, itd.) zamieniasz ją na człkowitą i masz dwie (no w sumie to trzy) drogi.

    1. zamieniasz liczbę całkowitą na tekst, wyświetlasz wszystko oprócz ostatniej cyfry (ostatnich dwóch, trzech...) wyświetlasz kropkę i dopiero ostatnią (ostatnie) cyfry.

    2. robisz dokładnie to samo co powyżej, ale piszesz odpowiednią procedurę wyświetlającą. Jak chcesz to mogę coś takiego wrzycić w asm '51, wyświetla liczby 24 bitowe z separatorem tysięcy i dziesiętnym (dziesiętny jest trochę oszukany, ale to akurat nieważne ;)
    Część tego (konwersja liczby na łańcuch) jest tutaj:
    https://www.elektroda.pl/rtvforum/topic299449.html

    3. Wyświetlasz integera podzielonego przez 10 (100, 1000...), kropkę i integera modulo 10 (100, 100...)

    Ostatnia metoda jest najprostsza w realizacji, ale dzielenie integerów to nie jest to, co 8 bitowe procki lubią najbardziej ;),
  • REKLAMA
  • #4 1514910
    kopernik8
    Poziom 21  
    Posty: 631
    Pomógł: 10
    Ocena: 18
    Chodzi o to że jak obliczam wszystko w Single'ach to po wyświetleniu mam cały wyswietlacz zawalony jedną zmienną która ma z 6 miejsc po przecinku...
    nie ma jakiejs opcji tak jak w C++ aby wyswietlić tą zmienną ale z ograniczeniem że tylko 1 miejsce po przecinku?

    Rozumiem z wawszych wypowiedzi że mam wziąć / z tej zmiennej, czyli mam całkowite postawić kropke i pobrać reszte z dzielenia?
  • #5 1514959
    jacur
    Poziom 32  
    Posty: 1748
    Pomógł: 166
    Ocena: 295
    W bascomie masz takie funkcje :

    FUSING
    FORMAT
    STR

    cos z tego powinno pomóc i warto czasmi przeglądnąc helpa ;)
  • #6 1515012
    kopernik8
    Poziom 21  
    Posty: 631
    Pomógł: 10
    Ocena: 18
    Tak FUSING to jest to o co chodziło...tylko jest duży problem teraz kod nie miesci mi sie do Flasha !!!
    Co mam poradzić nei mam co wywalić z kodu...BASCOM strasznie zawyża rozmiar kodu :(
  • REKLAMA
  • #7 1515103
    jacur
    Poziom 32  
    Posty: 1748
    Pomógł: 166
    Ocena: 295
    to zmienna *10 i do integera
    nastepnie funkcja
    str
    i
    format

    fusing to jest to czego sie unika w bascomie ;)
  • #8 1515271
    kopernik8
    Poziom 21  
    Posty: 631
    Pomógł: 10
    Ocena: 18
    Ok chłopaki dałem rade str i format i sie zmiesciłem we Flashu
    Dzieki za pomoc!!!

Podsumowanie tematu

✨ Dyskusja dotyczy wyświetlania zmiennej typu Single w BASCOM z ograniczeniem do jednego miejsca po przecinku. Problem polega na tym, że standardowe wyświetlanie pokazuje zbyt wiele miejsc po przecinku, a zapis do typu Integer powoduje zaokrąglenie w dół. Proponowane rozwiązania obejmują mnożenie wartości przez 10, konwersję na liczbę całkowitą, a następnie wyświetlanie części całkowitej i reszty z dzielenia, co pozwala na manualne wstawienie przecinka dziesiętnego. Wskazano trzy metody: manipulację tekstową, pisanie własnej procedury wyświetlania lub prostą arytmetykę na integerach. W BASCOM dostępne są funkcje FUSING, FORMAT i STR, które mogą pomóc w formatowaniu liczb zmiennoprzecinkowych. Użytkownik potwierdził, że zastosowanie funkcji STR i FORMAT pozwoliło na wyświetlenie liczby z jednym miejscem po przecinku i zmieściło kod w pamięci Flash, mimo że użycie FUSING znacznie zwiększa rozmiar kodu.
Wygenerowane przez model językowy.
REKLAMA