[daily snippet] Excel VBA – Zaokrąglanie w górę i w dół

No Comments

Witam w nowym cyklu “daily snippet”. Nie oznacza to oczywiście, że snippety będą publikowane codziennie, ale postaram się częściej, niż zwykle. Będą to bardzo krótkie wpisy z maleńkimi (często jednolinijkowymi) fragmentami kodu. Taki zbiór przydatnych rzeczy. Krótko, więc z reguły bez “czytaj dalej”, a przynajmniej z esencją sensu posta w jego nagłówku :)

Na pierwszy ogień zaokrąglanie liczb. Excel VBA posiada funkcję Round(), która po prostu zaokrągla, ale warto wiedzieć, że można też zaokrąglać w górę i w dół, stosując kolejno:

   Application.RoundUp(liczba, miejscaPoPrzecinku)
   Application.RoundDown(liczba, miejscaPoPrzecinku)

Na marginesie, gdyby komuś się chciało analizować kod, zanim znalazłem te funkcje, zdążyłem już napisać własne. Smacznego:

   'zaokraglenie w dol
   Function getFloor(ByVal liczba As Double, Optional ByVal miejsc As Integer) As Double
       If Not miejsc > 0 Then
           miejsc = 0
       End If
 
       liczba = Int(liczba * (10 ^ miejsc))
       getFloor = liczba / (10 ^ miejsc)
   End Function
 
   'zaokraglenie w gore
   Function getCeiling(ByVal liczba As Double, Optional ByVal miejsc As Integer) As Double
       If Not miejsc > 0 Then
           miejsc = 0
       End If
 
       If liczba * (10 ^ miejsc) <> Int(liczba * (10 ^ miejsc)) Then
           liczba = liczba + (1 / (10 ^ miejsc))
       End If
 
       liczba = Int(liczba * (10 ^ miejsc))
       getCeiling = liczba / (10 ^ miejsc)
   End Function

Dodatek: jeśli nie potrzebujemy żadnych miejsc po przecinku, do zaokrąglenia w dół i w górę można użyć odpowiednio:

   Fix(liczba)
   Fix(liczba + 0.5)

Leave a Reply

Your email address will not be published. Required fields are marked *