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

[bascom] inkrementacja zmiennej w ułamku dziesiętnym

fliper_katrill 11 Lip 2009 15:43 2848 3
  • #1 6766058
    fliper_katrill
    Poziom 20  
    Posty: 590
    Pomógł: 15
    Ocena: 28
    Witam serdecznie!
    Mam problem z inkrementacją zmiennej Z, ponieważ wszystko opiera się o dokładność przedstawiania liczby zmiennoprzecinkowej. Zamiast 0,1 pokazuje 0,09. Próbowałem już fusing(), frac() (wskazywanie liczby po przecinku, chciałem tą resztę zaokrąglać round() ) , może format() ale tu trzeba non stop konwertować zmienne na znaki z liczb i odwrotnie no i lipa , może nie tak się zabrałem do sprawy.
    Dziękuję z góry za pomoc!!

    
    $crystal = 1000000
    $regfile = "m16def.dat"
    Config Lcd = 20 * 2
    
    Dim Z As Single
    Dim A As Single
    Nastawy Alias Pina.3
    Deflcdchar 6 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32
    
    A = 5
    Z = Fusing(a , "##.#")
    
    Cls
    
    Do
    
    If Z < 10 Then
    Locate 1 , 2
    Lcd "Twardosc kH:   " ; Z ; Chr(6)
    Else
    Locate 1 , 2
    Lcd "Twardosc kH:  " ; Z ; Chr(6)
    End If
    
    If Nastawy = 0 Then
    Z = Z + 0.5
    End If
    
    If Z > 24 Then
    Z = 0
    End If
    
    
    Loop
    End
    


    Dodano po 6 [minuty]:

    Z = Z + 0.5
    zapomniałem poprawić zapis dla 0.5 jest wszystko ok dla 0.1 występuje błąd!
  • #2 6768730
    piotr5000
    Poziom 21  
    Posty: 393
    Pomógł: 40
    Ocena: 30
    Jest to błąd Bascoma , ale łatwy do skorygowania .
    Gdy dodajesz 0.1 , Bascom podstawia wartość 0.9999998.
    Musisz dodawać 0.1000002 i wynik jest OK

    Osobiście wolę użyć long , word lub integer, a przed wyświetleniem zmiennej sformatować do właściwej postaci.

    Programy zajmują mniej miejsca i działają szybciej
  • #3 6772039
    fliper_katrill
    Poziom 20  
    Posty: 590
    Pomógł: 15
    Ocena: 28
    Dzięki za odpowiedź :)
    No to działasz sobie na całkowitych czyli osobno inkrementujesz jednostki dziesiątki i części ułamkowe (szczerze mówiąc tak właśnie rozwiązałem problem , ale czekam może ktoś wskaże inne rozwiązanie), czy mógłbyś mi pokazać swój sposób, zwłaszcza interesuje mnie formatowanie ,którego dokonujesz??
  • Pomocny post
    #4 6778029
    piotr5000
    Poziom 21  
    Posty: 393
    Pomógł: 40
    Ocena: 30
    Nie do końca tak jak myślisz .
    Jeżeli liczba ma mieć postać xx,x to zamiast np. 12,5 * 3 = 37,5 do obliczeń biorę liczby 125 i 3 . Wynik 125*3 = 375
    Jeżeli w programie mam ten wynik porównać z liczbą 35,0 to porównuje z 350 ( napisz program operujący na liczbach zmiennoprzecinkowych a potem na całkowitych i porównaj rozmiar i szybkość działania , wykonując w pętli obliczenia np 10000 razy) Tylko jeżeli wynik mam wyświetlić to zamieniam go na postać : Cc,Cu czyli Część_całkowita , Część_ułamkowa.

    W podanym przykładzie :
    Cc = 375/10 - Cc musi być typu całkowitego np. WORD
    Cc = 37
    Cu = 375-(Cc*10)=5 - Cu też WORD

    Cc,Cu <=> 37,5
REKLAMA