Zaokrąglanie – Funkcja Round()

Wstęp

Każdy kto pisze jakiś kod, kiedyś w końcu wykona jakieś działania arytmetyczne i ich wynik będzie chciał pokazać w jakimś zaokrągleniu.
Wtedy czy z dokumentacji, czy z internetu natknie się na funkcje Round(). No nic prostszego przekazujemy liczbę i ilość miejsc po przecinku i mamy oczekiwany rezultat…

Problem

Problem pojawi się szybciej lub później, ale na pewno będzie wychwycony przez dociekliwych użytkowników. Round do zaokrąglania połówek używa metody bankiera (Banker’s Rounding)
(źródło: http://support.microsoft.com/kb/196652).
O co w tym chodzi?
Chodzi o to, że w przypadku wartości połówkowych (.5) zaokrąglenie jest do najbliższej liczby parzystej, czyli:
Round(1.5,0) => 2
Round(2.5,0) => 2

Mówiąc szczerze nigdy nie potrzebowałem tej metody, ale widać w US jest to stosowane…

Rozwiązanie

Jedynym rozwiązaniem jest napisanie własnej funkcji do zaokrąglania wartości, i tu dziwnym przypadkiem okazuje się, że najłatwiej osiągnąć to wykorzystując funkcje Format, która zaokrągla w sposób arytmetyczny:

Function RoundA(ByVal d As Double, Optional ile As Integer = 0) as Double
    Dim f           As String
    If ile <= 0 Then
        f = "0"
    Else
        f = "0." & String(ile, "0")
    End If
    RoundA = CDbl(format(d, f))
End Function

Podsumowanie

Jeżeli potrzebujemy w naszych obliczeniach zaokrągleń znanych nam ze szkoły podstawowej, musimy użyć własnej funkcji, co nie powinno nastręczyć większych problemów.

  1. Nie używam akurat accessa, co zwróci Round(1.5,2)?

  2. Banker’s Rounding = Metoda bankiera!

Reply to Wojtek ¬
Cancel reply

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera
Skip to toolbar