Public Function foo() Dim x As Double, y As Double, z As Double x = 1.26 y = 3.175 z = Round(x + y, 2) foo = z End Function
Running Excel 2007 on Windows 7. This function returns 4.43 into a cell with =foo() which is annoying as I want 4.44. I found some documentation claiming VBA ROUND uses even rounding but here the last digit is odd. What is wrong here?
You can always use the Worksheet Round Function instead of VBA’s built-in one
Public Function foo2() Dim x As Double, y As Double, z As Double x = 1.26 y = 3.175 z = Application.WorksheetFunction.Round(x + y, 2) foo2 = z End Function
foo2 will result in
4.44 (tested on my machine). I don’t know if this would affect performance at all.
You will need to use decimal types to accomplish this which uses integer based arithmetic as opposed to floating point based.
Excel doesn’t have a native data type for this, so you have to use a
Variant and then convert to a decimal using the
Public Function foo() Dim x As Variant, y As Variant, z As Variant x = CDec(1.26) y = CDec(3.175) z = Round(x + y, 2) foo = z End Function