I took a quick look at June7's reference and it gives you a very accurate - but very technical - "why" of what is happening. It gets kind of wordy. If that was long enough to take you into the weeds and lose you, here is a shorter answer.
That long string of digits is caused by the fact that 1/10 = 1/2 * 1/5, 1/100 = 1/4 * 1/25, etc. Your number 9.07 contains 9 (an exact number) + 7/100 - and it is fraction that causes the problem.
The 1/2 and 1/4 are exact in binary, but because the 1/5 and 1/25 are NOT exact in binary, you run into the same problem as expressing 1/3 in decimal, = 0.3333...333_ out to as many places as you like. Well, 1/5 and its multiples lead to the same exact problem in binary because 1/5 is a fraction based on an odd number. I.e. representing an odd number in an even numeric base. That's where the long string of digits come from.
The fix is to recognize that you are confusing computation with display. Literally, you DO NOT CARE what the computation contains because in binary, that's all it will ever contain anyway. If you choose a format of 2 decimal places, the formatting code will round off the internal value to the closest number that can be displayed with that number of decimal places. A format such as, e.g. Format(number, "#####.##"), would fix that problem. The greater problem would be whether you wanted more or fewer digits for some other number. There are many places where you can adjust the displayed value including the formatting of a text box or query.
You MIGHT be tempted to use a function such as ROUND, but that actually doesn't help because if you store the ROUNDed number back into a SINGLE or DOUBLE, you have the same exact representation problem.