[daily snippet] Excel VBA – Zaokrąglanie w górę i w dół
marzec 31st, 2011. Brak komentarzy.
Kategorie: Visual Basic, Zabawy z kodem.
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)