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


[Strona główna] [Wyjście] [Poprzedni] [Następny]