MyTetra Share
Делитесь знаниями!
Округление до произвольного к-ва знаков после запятой
Время создания: 16.03.2019 23:43
Раздел: !Закладки - VBA - Access - msa.polarcom.ru - 14 Преобразование Чисел и Дат
Запись: xintrea/mytetra_db_adgaver_new/master/base/1532018399x8314eg8lc/text.html на raw.githubusercontent.com

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

Прислал: Сергей Оркин  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





Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования