The basic reason why your reasoning is wrong is that adding 0.9
is not an invertable operation. However you have it backwards. There are more floating point numbers between 0.0 and 0.1 than between 0.9 and 1.0.
As for how to make an unbiased floating point RNG, you should initially generate numbers in the range [1.0,2.0) then translate and scale the result accordingly. This works because the interval [1.0,2.0) has uniform precision across the entire range (the exponent is the same for all numbers in this range).
If you're working with IEEE single precision, which has the form:
s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm
Just fix the sign and exponent bits, and use a uniform random PRNG for integers to fill the mantissa bits. The same would apply to double.