Symfonia błędnie oblicza działania matematyczne
Zaintrygowała mnie pewna sprawa w Symfonii Handel 2006c
Piszę raport, gdzie potrzebuję się dowiedzieć, czy wynik dzielenia jest całkowity czy ułamkowy.
Rozwiązuje to reszta z dzielenia, czyli operator %.
Jednak gdy podam liczby zmiennoprzecinkowe (float) to wywala błąd, więc rozumiem, że operator pracuje na liczbach całkowitych.
Więc zabieram się do ominięcia operatora, korzystając z funkcji zaokrąglającej Round.
Oto przykład, gdzie mam błąd:
Kod:
float liczba1 = 4.2
float liczba2 = 1.4
float wynik = liczba1/liczba2
FLOAT rwynik = Round(wynik,0)
if (wynik-rwynik)==0 then
Message "Brak reszty - OK"
else
Message "Jest reszta"
endif
Error ""
Komunikat, który mi wyskakuje to "Jest reszta". Gdy liczby są całkowite działa to prawidłowo, jeśli zmiennoprzecinkowe to też działa, ale ten przykład akurat NIE!!
Załamać się idzie.
Zmienna wynik w powyższym przykładzie wyniesie 3.0, zaokrąglony całkowitej jako zmienna też wyniesie 3. Więc 3-3 jest 0 i powinno się pokazać "Brak reszty". Jak dam liczby np. 5.6 i 1.4 to wynikiem będzie całe 4 i pokazuje dobrze. Jak dam 3.9 i 1.3 to też jest dobrze.
ZNALAZŁEM drugi przypadek. To para liczb 3.3 i 1.1
Proszę wklejcie ten krótki raport do Symfonii i przekażcie wyniki, bo się idzie pochlastać.
Dziękuję z góry
Zamiast if..endif dałem select case..end select - niestety to samo w przypadku tych dwóch par liczb. Być może jeszcze jakieś istnieją :(
Kod:
Select Case (wynik-rwynik)
Case 0
Message "Brak reszty - OK"
Case Else
Message "Jest reszta"
EndSelect