Não, piorou, ele apenas está exibindo arredondado. BigDecimal consegue representar números com precisão arbitrária (não usa o hardware para isso), mas você vai ter que se assegurar que tudo está trabalhando com BigDecimal (ou equivalente, no caso do banco).
E não tente fazer coisas do tipo:
BigDecimal.new("0.07") + 0.1 => ele vai fazer cast pra float, pra depois fazer a soma. No IRB vai aparecer como 0.17, mas isso é só porque ele está arredondando/truncando o resultado pra você para duas casas decimais.
> BigDecimal.new("0.07") + 0.1
=> 0.17
> printf("%.50f", (BigDecimal.new("0.07") + 0.1))
0.17000000000000001221245327087672194465994834899902 => nil
Dito isso, a não ser que você esteja trabalhando com valores monetários (que não devem usar float mesmo) ou seja resultado de inúmeras operações em ponto flutuante, isso não têm importância. Formate antes de imprimir para o usuário com a precisão que você quer.
Recomendo ler um pouco mais sobre representação de números em ponto flutuante (base 2). Você vai esbarrar com problemas desse tipo de vez em quando - por exemplo, na hora de comparar 2 Floats. Ruby é bonzinho e tenta usar Float::EPSILON pra isso, mas nem sempre é o valor correto para seu caso.
-- Stephen
"Kids these days.
Whatever happened to hard work?"
-- Joel Spolsky, The perils of javaschools