В Access нет MRound
, поэтому создайте свою собственную функцию округления.
Однако, никогда не используйте для этого Round
, поскольку она, как известно, глючит. Таким образом, используйте простую математику и тип данных Десятичный , чтобы избежать ошибок:
' Rounds a value by 4/5 to the nearest multiplum of a rounding value.
' Accepts any value within the range of data type Currency.
' Mimics Excel function MRound without the limitations of this.
'
' Examples:
'
' RoundAmount(-922337203685477.5808, 0.05) -> -922337203685477.6
' RoundAmount( 922337203685477.5807, 0.05) -> 922337203685477.6
' RoundAmount( 10, 3) -> 9
' RoundAmount(-10,-3) -> -9
' RoundAmount( 1.3, 0.2) -> 1.4
' RoundAmount( 122.25, 0.5) -> 122.5
' RoundAmount( 6.05, 0.1) -> 6.1
' RoundAmount( 7.05, 0.1) -> 7.1
' 2009-05-17. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function RoundAmount( _
ByVal Value As Currency, _
ByVal RoundValue As Currency) _
As Variant
Dim BaseValue As Variant
Dim Result As Variant
BaseValue = Int(Value / CDec(RoundValue) + CDec(0.5))
Result = BaseValue * RoundValue
RoundAmount = Result
End Function
Эта функция, например, будет округлять это правильно:
Amount = RoundAmount( 122.25, 0.5)
Amount -> 122.50
Длядополнительную информацию о точном округлении см. в моем проекте на GitHub :
VBA.Round
и статьях, упомянутых здесь.