One of our agents has a problem. For years, floating-point math has been too complicated. Remember the good old days? You used to be able to type `var=INT(var+0.5)` without black-box functions getting in the way. These glory days are long past.

In fact, the reason the IEEE was created was to make floating-point math miserable, especially when it comes to rounding. It is in this new world that Smith works, attempting to round to an arbitrary number of digits. However, when he puts 39.995 into his function, it returns 39.99 instead of 40.00. Other inputs produce the expected output, e.g. 11.995 produces 12.00. Can you solve the mystery?

It would probably help if I showed you the code. (It's Visual Basic --- an important fact --- so jot that down.)

Public Function roundTo( number as Double, digits as Integer ) As Double Dim temp As Double Dim factor As Double factor = 10 ^ digits temp = number * factor + 0.5 roundTo = Int(temp) / factor End Function

In the end, Smith ended up changing the code to use a formatting function but he's still wondering what went wrong before. The challenge is for you to figure out what's going on here and explain it to the rest of us. For completeness, here's the new code but that's the last itoa from me.

Public Function roundTo( number as Double, digits as Integer ) As Double roundTo = roCDbl( Format(number, "0." & String(digits,"0")) ) End Function