Hi Skip,
>>The problem I found was that you don't get exact representation when using float<<
Of course you don't - check Books Online. Float is an approximate-number data type. For most numbers, it can only store a (close) approximization.
Internally, float uses base-2 representation. As a result, only numbers that can be written as x + (y / EXP(2, z)) where x and y are integers and z is a non-negative integer can be represented exactly in that representation. Just like our common base-10 representation can only represent an approximation of 1/3, float can only represent an approximation of 1.235.
That's one of the reasons why I wrote that the function should use decimal instead of float in my previous reply (though I now see that I forgot to change the datatype for the internal variable).