Forum Discussion

Morya_ali_asiri's avatar
Morya_ali_asiri
Copper Contributor
Jul 13, 2021

Rounding decimals in a math operation

Hello
When performing a arithmetic operation in an Access field, such as
((5*5*4/3)+2*5+2*4)/20=2.56
I want a code that rounds this result to 3
meaning nearest and highest integer
thank you

  • Gustav_Brock's avatar
    Gustav_Brock
    Iron Contributor

    Morya_ali_asiri 

    ... as the nearest integer could be lower, I guess you mean "nearest higher integer".

    That is rounding up which is easy to perform:

    ValueUp = -Int(-(5*5*4/3+2*5+2*4)/20)
    ' ValueUp will be 3.

     For serious rounding of any values with extreme precision, go to VBA.Round .

    • isladogs's avatar
      isladogs
      MVP
      Interesting. So both of these expressions round up to the next higher integer for all positive and negative numbers
      Int(YourNumber)+1
      -Int(-YourNumber)

      However if the result is itself an integer, adding 1 will give the wrong result.
      So I agree that that using Gustav's method is better.

      -
    • isladogs's avatar
      isladogs
      MVP

      As Karl suggested there are many ways of doing this, jncludjng formatting.

      Other methods using built in functions include

      ?CInt(2.56)
       3 
      ?Round(2.56,0)
       3 
      ?Int(2.56)+1
       2 
      ?Fix(2.56)+1
       3 

      Int and Fix both give the integer value so you need to add 1 to the result

       

      But what if the result is nearer to the lower integer value e.g. 2

      Both CInt and Round will now round down so you would need to add 1. 

      So avoid those as not consistent.

       

      Now consider negative results such as -2.56 or -2.16

      Assuming you want the result to be -2 in each case, then the only function that always gives the desired answer in all scenarios is using Int(number)+1

       

      Hope that makes sense

Resources