В какой локали вы работаете? Моя догадка заключается в том, что он лечит "." как разделитель тысяч (который в данном случае оказывается не в том месте), а "," как десятичная точка.
Попробуйте
"9,99".to_f
... но если это сработает, это, вероятно, зависит от текущей культуры системы, и вы должны искать способ преобразования, не зависящий от культуры.