order by returning strange results

Hi,

I am trying to make a call to find, and have the result set ordered. However, I am experiencing some strange behaviour. The column I want to sort on is of type varchar, but actually contains floating point numbers. (I needed to switch the type to varchar to get validation on the input working properly). So when I just try to order, it returns in what seems to be a properly ordered (in terms of strings) collection. However, I am trying to get it to return the collection sorted in terms of float values. I tried just returning the collection and then using sort_by with column.to_f, but this wasn't working (even though when I tried it just through IRB that call to sort_by on an array of strings worked fine). Here is how the "sorted" list came out using this method:

45.418185 45.4226533 45.11111 45.333333 -75.123213 -12.12344 -12.12344 13 -99

So then I tried to implement it in the SQL query, using CAST (ie, ORDER BY CAST(column as SIGNED) ) but this is returning some strange results too. For example, here is the "sorted" output of using CAST:

-99 -75.123213 -12.12344 -12.12344 13 45.333333 45.11111 45.4226533 45.418185

Does anybody have any ideas whats going on, or any other approaches that I could try to get this working?

Thanks,

Simon