TopPicLogo TopPicText

Округление до произвольного к-ва знаков после запятой

Прислал: Сергей Оркин  userpirx@yandex.ru

Простейший способ округлить до 2х знаков после запятой:
Результат = CCur(Format(Выражение, "0.00"))
- но работает эта конструкция довольно медленно, вот пара вариантов побыстрее.

Кстати:
Начиная с MSA 2000 лучше использовать встроенную функцию:  Round()

Результат = Round(Выражение, 3)



Варианты:

Public Function Okrug(s As Variant, Optional m As Byte = 2) As Double
'Округляет аргумент от 0 до m знаков  после запятой
'При возникновении любой ошибки возвращает = 0
On Error GoTo OkrugErr
Dim n As Long, d As String
    d = String(m, 0)
    n = val(1 & d)
    If s * n - Int(s * n) < 0.5 Then
        Okrug = Int(s * n) / n
    Else
        Okrug = (Int(s * n) + 1) / n
    End If
    Exit Function
OkrugErr: 'Метка обработчика ошибок
    Okrug = 0
    Err.Clear
End Function

Вот вариант округления только до ДВУХ знаков - зато работает в трое быстрее

Public Function RoundTwo(s As Variant) As Currency
'Округлят аргумент до двух знаков после запятой 
'при возникновении ошибки возвращает НОЛЬ
Dim x As Long
On Error GoTo RoundTwoErr
    x = Int(s * 100)
    If s * 100 - x < 0.5 Then
        RoundTwo = CCur(x / 100)
    Else
        RoundTwo = CCur((x + 1) / 100)
    End If
    Exit Function
RoundTwoErr: 'Метка обработчика ошибок
    RoundTwo = 0
    Err.Clear
End Function


Назад ToTop
L.E. 04.08.2015
Рейтинг@Mail.ru