tmf napisał: Typowo taka zmienna ma 32 bity, stąd można przechowywać 2^32 różnych liczb, jako, że single ma pewnie coś koło +/-10^38 to dostrzegasz problem?
Dostrzegam problem, bo operacje na tych "niedokładnych" wartościach np. trzykrotne podzielenie przez 10, albo co gorsza przez same siebie powoduje czasem totalną "kaszanę". Ostatecznie jednak doszedłem do w miarę działającego rozwiązania.
Muszę z 4 przyciskowej klawiatury zrobić możliwość wpisania liczby XXXX.YYY, gdzie XXXX to wartość kOhm a YYY to Ohm.
Liczbę zczytuję cyfra po cyfrze. Klawiszami Up / Down wybieram cyfrę lub kropkę dziesiętną (do wyboru cyfry 0...9 i kropka dziesiętna). Klawiszem S3 przechodzę do następnej pozycji. A klawiszem S4 kończę wprowadzanie liczby.
Do
If S1 = 0 Then
Cyfra$ = Cyfra$ + 1
Bitwait S1 , Set
End If
If S2 = 0 Then
Cyfra$ = Cyfra$ - 1
Bitwait S2 , Set
End If
If S3 = 0 Then
Bitwait S3 , Set
Incr Lkursor$
If Cyfra$ = 10 Then
Ulamek = 1
Lcd "."
End If
If Ulamek = 1 Then Incr Mnoznik$
If Cyfra$ < 10 Then
If Lkursor$ = 1 Then Wartosc$ = Cyfra$
If Lkursor$ > 1 Then
Wartosc$ = Wartosc$ * 10
Wartosc$ = Wartosc$ + Cyfra$
End If
End If
End If
If S4 = 0 Then Exit Do
Upperline
Zmienna_byte$ = Int(cyfra$)
Lcd Zmienna_byte$
Locate 1 , 6
Lcd Ulamek
Locate 1 , 10
Lcd Cyfra$
Lowerline
Lcd Mnoznik$
Locate 2 , 10
Wynik$ = Fusing(wartosc$ , "####.###")
Lcd Wynik$
Loop
Wszystko prawie działa. Tzn. nie ma problemu z wpisaniem liczby np. 1234.56 wówczas uzyskuję wynik: 1234.560. Ale już wpisanie 1234.567 powoduje wynik: 1228.806. Jak domniemuję liczba 1234,567 nie mieści się w zmiennej single. Więc będę musiał to zrobić jakoś inaczej.