Imagine the following:
create_table :vehicle do |t|
t.integer :wheels
t.float :top_speed
end
v = Vehicle.new
v.wheels = []
v.top_speed = 10.2
v.save #=> true
v.top_speed = []
v.save #=> NoMethodError: undefined method `to_f' for []:Array
No matter how weird this example may seem (why are we setting an empty array as the value of a float column?) there's an issue of consistency in that you can do it for integer based columns but not float based columns. Looking at most of the other type casting methods in schema_definitions.rb it would seem that most other column types would do something other than fail with an Error. Also when we consider AR outside of the web development space and as a standard ORM, code is much more likely to mistakenly set values that are not strings (e.g. cope with .to_f being called on them) so we should cope sensibly and leave it up to validations to argue about the correctness of the data going in.
Whether or not we think that forcing non to_f-able values to a float is a good thing or not is really a separate issue (see #608 for a discussion on that) we should aim at consistency and only then aim at a particular standpoint on the issue (given what AR does now I think we can assume that AR believes forcing values is good). Right now we have no consistency, so we can't even begin to argue about a standpoint.