# Web Development

## General discussion

• Creator
Topic
• #2316276

### Rounding Down In Access Take 2

Locked

by d_bones ·

Does anyone know how to round down numbers in Access. i.e. 99.999 becomes 99.99 not 100.00.

Any function or formula will do. I need the same as the Excel function Rounddown.

Thanks to who previously suggested convert to an integer, but I think you missed the point.

• Author
Replies
• #3380453

### Reply To: Rounding Down In Access Take 2

by sachin ·

In reply to Rounding Down In Access Take 2

Syntax: Round(expression[, numdecimalplaces])

The Access Round() function appears to be a handy way of rounding decimal values to a given number of decimal places. For example, Round(2.341, 2) returns 2.34.

However, it does not perform rounding the way you might expect. Take this example:

Round(2.385,2)

You would expect this to return 2.39, but if you open an immediate window and type ?Round(2.385,2) you will get the following output:

2.38 (not 2.39)

Even though the last digit was 5, it rounded DOWN.

If this is not the behaviour you expected, then here?s the explanation:

The Round() function does a round-to-even, not the more well-known round-to-larger. If the argument ends in 5, the number may be rounded up or down to achieve an even rightmost figure.

So in our example above:

2.385 could be rounded to either 2.38 or 2.39. The former has an even rightmost figure, so this is the result.

The reasoning behind this is to eliminate cumulative errors over a series of calculations. Put another way, 100 half pennies should round to be equal 50 cents, not 100 cents.

A RoundToLarger() function:

Public Function RoundToLarger(dblInput As Double, intDecimals As Integer) As Double

‘Implements a variant of the Round() function, that rounds-to-larger
‘rather than rounds-to-even:

Dim strFormatString As String ‘Format string

‘If input is zero, just return zero. Else format as appropriate:
If dblInput <> 0 Then
strFormatString = “#.” & String(intDecimals, “#”)
RoundToLarger = Format(dblInput, strFormatString)
Else
RoundToLarger = 0
End If

End Function

• #3380049

### Reply To: Rounding Down In Access Take 2

by d_bones ·

Many thanks but this still rounds 99.998 to 100 We need to round down in every instance regardless of the third or subsequent decimal place.

• #3380048

### Reply To: Rounding Down In Access Take 2

by d_bones ·

Many thanks but this still rounds 99.998 to 100 We need to round down in every instance regardless of the third or subsequent decimal place.

• #3380451

### Reply To: Rounding Down In Access Take 2

by sachin ·

In reply to Rounding Down In Access Take 2

SELECT CLng( number + .5) as Expr;

This statement works in Access 2000 and will round up any number to the next whole number. For example:
2.00001 -> 3
2.9 -> 3
2.0 -> 2

• #3380047

### Reply To: Rounding Down In Access Take 2

by d_bones ·

Sorry but we want to round down to two decimal places not up to an integer- thanks for the reply

• #2743384

### Reply To: Rounding Down In Access Take 2

by d_bones ·

In reply to Rounding Down In Access Take 2

Many Thanks for the suggestions. Finaly found the answer on Microsoft Knowledge Base Article 210564 – Round or Truncate Currency Values 🙂

• #2741761

### Reply To: Rounding Down In Access Take 2

by pancras ·

In reply to Rounding Down In Access Take 2

int() cuts off the decimal part.
so int(x) leaves you with the whole part.
int(99.999*100)/100 gives 99.99 should do the trick

• #2744635

### Reply To: Rounding Down In Access Take 2

by techrep ·

In reply to Rounding Down In Access Take 2

This is not very elegant but it works. Convert the number to a string and truncate like so:

Function RoundDown(TheNum As Double, Decimals As Integer) As Double
Dim buf As String, pos As Integer, Rounded As String

buf = CStr(TheNum) ‘Convert the number to a string
pos = InStr(buf, “.”) ‘locate decimal point
If pos = 0 Then ‘if no decimals
Rounded = TheNum
Else
Rounded = Left(buf, pos + Decimals)
End If
RoundDown = Val(Rounded) ‘convert to numeric

End Function