P004
Zaokrąglanie kwot po przecinku
Access nie posiada funkcji podobnej do ZAOKR w Excelu, zaokrąglającej liczby do określonego miejsca po przecinku. Można jednak napisać własną, np.
wynik=Int(liczba * 100 + 0,5) / 100 ' przykład zaokrąglania do 2 miejsca po przecinku
Bardzo ważne. Powyższa funkcja zadziała poprawnie tylko dla 'liczba' typu Waluta (Currency). Dla liczb zmiennoprzecinkowych pojedynczej lub podwójnej precyzji wynik zwracany przez Int może być nieprawidłowy. Można się o tym przekonać wykonując w oknie bezpośrednim (Okno analizy programu) proste doświadczenie:
Ponieważ typ Waluta przechowuje liczby stałoprzecinkowe z czterema miejscami po
przecinku, zaokrąglanie kwot powyżej trzeciego miejsca nie ma sensu
(np. Int(1.0000025@*1000000+0.5)/1000000).
Często proponowanym na grupie dyskusyjnej wyjściem jest stosowanie do zaokrągleń funkcji CInt i CLng, np. CInt(liczba*100)/100. Takie rozwiązanie, przy zaokraglaniu kwot nie jest zalecane z dwóch powodów:
Poniżej przedstawiam funkcję, którą stosuję w swoich aplikacjach (napisana w Acc 2.0, powinna działać prawidłowo również w wyższych wersjach):
Function Round100 (ByVal liczba)
' funkcja zwraca zaokraglanie liczb
' do setnych czesci
' Parametry:
' liczba - wprowadzana liczba
On Error GoTo Err_Round100
' dla Null zamien na zero
If IsNull(liczba) Then liczba = 0
' przeksztalcenie na typ Currency, poniewaz dla liczb
' zmiennoprzecinkowych Access zwraca bledy zaokraglen.
Round100 = Int(CCur(liczba) * 100 + .5) / 100
Exit_Err_Round100:
Exit Function
Err_Round100:
MsgBox Error$, , "Round100 Error"
Resume Exit_Err_Round100
End Function
Napisał: Stanley, 5.02.1999
Źródło: http://www.microsoft.com/support
ARTICLE ID Q97524